Reactjs semantic-ui как правильно изменить тег JSX условно

У меня есть тег, который я хочу условно определить

<Table.Cell positive>{item}</Table.Cell>

Тогда как правильно это делать? Я заменил его функцией

{this.callme(item)}

и функция затем возвращает это

callme = (item) => {
  let res;
  if (item && item > 3)
    res = <Table.Cell positive>{item}</Table.Cell>
  else if (item && item < -3)
    res = <Table.Cell negative>{item}</Table.Cell>
  else if (item)
    res = <Table.Cell>{item}</Table.Cell>
  else
    res = <Table.Cell>..</Table.Cell>
  return res;

Но это многословно. Затем я попытался изменить внутри тег, но это не разрешено

<Table.Cell {mystate}>{item}</Table.Cell>

а тут вопрос. Как я могу изменить сам тег? Как это должно быть написано?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете оптимизировать метод callme следующим образом:

callme(item) {
  if (item) {
    return <Table.Cell positive = {item > 3} negative = {item < -3}>{item}</Table.Cell>
  } else {
    return <Table.Cell>..</Table.Cell>
  }
}

Хотя правильно проголосованный ответ действительно работает, он значительно более подробен, чем должен быть. Этот ответ гораздо короче.

brianespinosa 02.10.2018 18:07
Ответ принят как подходящий

Я бы предложил небольшую корректировку вашего подхода, который возвращает компонент напрямую, а не назначает и возвращает через res:

callme = (item) => {

  if (item && item > 3)
    return (<Table.Cell positive>{item}</Table.Cell>)
  else if (item && item < -3)
    return (<Table.Cell negative>{item}</Table.Cell>)
  else if (item)
    return (<Table.Cell>{item}</Table.Cell>)
  else
    return (<Table.Cell>..</Table.Cell>)
}

Помимо этого изменения, ваш общий подход хорош тем, что он удобочитаем и функционально корректен.

В качестве альтернативы вы можете изменить общую структуру ваших методов, чтобы минимизировать общее количество строк, и сократить четыре оператора возврата до одного оператора возврата:

callme = (item) => {
    return (item ? 
    <Table.Cell negative = { item < -3 } positive = { item > 3 }>{item}</Table.Cell> : 
    <Table.Cell>..</Table.Cell>)
}

Да, уловка в том, что любое свойство внутри JSX действительно является 'property = bool', которое я нашел в semantic-ui api. И ваш код - это именно то, что я пытался понять. Большое спасибо!

GWorking 30.09.2018 08:48

Отлично, рад, что смог помочь!

Dacre Denny 30.09.2018 09:17

Другие вопросы по теме