Реагировать — условный родительский компонент

#reactjs #antd

#reactjs #antd

Вопрос:

У меня следующий состав компонентов:

 <Badge.Ribbon text={ribbonText}>
      <Card className={'userCard'}
            hoverable
      >
        Some Data
      </Card>
</Badge.Ribbon>
  

Я хочу показать Badge.Ribbon компонент только в том случае ribbonText , если он не равен нулю. Это означает, что при ribbonText значении null я не хочу использовать Badge.Ribbon родительский компонент (который искажает весь компонент).

Каков идеальный способ в React справиться с этим?

Единственное решение, которое приходит мне в голову, — это создать новый компонент для каждой карты, например someCard , ribonnedCard для карт с лентой, но мне интересно, есть ли другое решение без создания нового компонента для каждого варианта использования.

Спасибо!

Ответ №1:

 let result = (
    <Card
        className='userCard'
        hoverable
    >
        Some Data
    </Card>
);

if (ribbonText !== null) {
    result = (
        <Badge.Ribbon text={ribbonText}>
            {result}
        </Badge.Ribbon>
    );
}
  

Ответ №2:

Создание оболочки сделало бы трюк:

 const wrapper = (condition, child) => condition ? <Wrapper>{child}</Wrapper> : child;
  

Ответ №3:

Это приведет к отображению обернутого Card внутри Badge.Ribbon , когда ribbonText значение не равно null.

 {ribbonText !== null ? (
  <Badge.Ribbon text={ribbonText}>
    <Card className={'userCard'} hoverable>
      Some Data
    </Card>
  </Badge.Ribbon>
) : (
  <Card className={'userCard'} hoverable>
    Some Data
  </Card>
)}
  

Кроме того, в зависимости от ваших требований вы можете просто проверить истинное значение ribbonText by {ribbonText ? <Component1/> : <Component2 />} .

Для className вы можете напрямую предоставить строку, подобную этой <Card className="userCard" hoverable>

Комментарии:

1. Это то, что я улучшаю в первую очередь. Спасибо за исправление