Как условно отрисовать компонент в React + TypeScript - PullRequest
0 голосов
/ 27 мая 2020

Обновление

Возможно, решение заключается в том, как я объявляю компонент:

import React, { FunctionComponent } from 'react';

export const ChapterDescription: FunctionComponent<
    ChapterDescription
   > = (
   {
    description,
    name,
   }: ChapterDescription,
   ) => (
   <div>
     <h3>{name}</h3>
     <p>{description}</p>
   </div>
 );

Когда я использовал только reactjs для своих компонентов, я мог легко сделать условно рендеринг такого компонента (проверьте, есть ли в массиве chapters элементы и только , затем визуализируйте компонент):

<OtherComponent/>    
    <div>
        {chapters.length > 0 && <ChapterDescription
            name={name}
            description={description}
        />}
    </div>
<OtherComponent2 />

Когда я пытаюсь это сделать, в машинописном тексте появляется ошибка:

Type 'false | Element' is not assignable to type 'Element'.
  Type 'false' is not assignable to type 'Element'.ts(2322)

enter image description here

Условный рендеринг - это уже плохая практика? Как мне поступить с этим делом?

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Ну это не так очевидно, но фрагменты - это решение для условного рендеринга в машинописном тексте или одно из решений:

Теперь он не жалуется :

<Acomponent />
 <>
   {chapters && chapters.length > 0 && (
     <ChapterDescription
       name={selectedChapter.name}
       description={selectedChapter.description}
     />
   )}
 </>
<AnotherComponent />

источник: https://en.reactjs.org/docs/fragments.html

0 голосов
/ 27 мая 2020

Попробуйте вместо этого использовать тернарный оператор, так вы либо используете компонент, либо null:

<OtherComponent/>    
    <div>
        {chapters.length > 0 ? <ChapterDescription
            name={name}
            description={description}
        /> : null}
    </div>
<OtherComponent2 />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...