Встроенный тернарный условный оператор

Я пытаюсь отобразить компонент с помощью троичной операции. Я хочу показать компонент, если this.state.info и this.state.shortdef имеют длину больше 0. Как правильно это закодировать и почему? Вот мой код:

render (){

  return (

      <div>
        <div>
        {!(this.state.info && this.state.shortdef.length > 0) ? <addBook /> }
        </div>
      </div>
  );
  }

person Elizabeth    schedule 21.07.2020    source источник
comment
Также в качестве примечания: компоненты React должны всегда начинаться с заглавной буквы. Сделай это <AddBook />   -  person Jayce444    schedule 21.07.2020


Ответы (3)


{(this.state.info.length > 0 && this.state.shortdef.length > 0 && <addBook />}

Если у вас нет второго варианта возврата, вам не нужен тернарный оператор. && отобразит компонент, если предыдущие утверждения верны.

person Ross    schedule 21.07.2020

В этом случае вам не нужен троичный оператор, вы можете использовать оператор &&, но небольшие предложения по вашему коду, компоненты всегда должны начинаться с прописной буквы, поэтому <AddBook /> и я лично перевели бы условие в константу, чтобы сделать рендеринг менее громоздким.

render (){
  const hasNoBooks = !(this.state.info && this.state.shortdef.length > 0)

  return (
    <div>
      <div>
        { hasNoBooks && <AddBook /> }
      </div>
    </div>
  );
}
person Lukáš Gibo Vaic    schedule 21.07.2020

Если вы хотите показать компонент при определенном условии, выполните следующее:

{(this.state.info && this.state.shortdef.length > 0) && <addBook />}

Если вы хотите показать один компонент при определенном условии, а другой — при нарушении условия, используйте оператор ternary:

{(this.state.info && this.state.shortdef.length > 0) ? <addBook /> : <SomeOtherComponent />}
person Rohan Agarwal    schedule 21.07.2020
comment
Привет @Rohan, это очень полезно. По какой-то причине компонент не регистрируется, хотя он указан как импортный. Есть ли другая причина, по которой он может не зарегистрироваться? - person Elizabeth; 21.07.2020
comment
Можете ли вы отредактировать вопрос и вставить свой код туда, где вы столкнулись с этой проблемой? - person Rohan Agarwal; 22.07.2020