Не удается отобразить логическое значение в JSX?

#javascript #reactjs #redux #react-props

#javascript #reactjs

Вопрос:

Я пытаюсь отобразить логическое значение внутри JSX, однако React оценивает его как выражение и ничего не возвращает после возврата компонента.

Есть ли обходной путь для этого?

Вот пример

 var ipsumText = true;

ReactDOM.render(
  <div>
     Boolean Value:    {ipsumText}
  </div>,
  document.getElementById('impl')
);
  

Просто показывает скомпилированный HTML как

 <div data-reactid=".0"><span data-reactid=".0.0">Boolean Value:    </span></div>
  

РЕДАКТИРОВАТЬ: Вот ссылка на JSBin для примера http://jsbin.com/nibihodoce/1/edit?html ,js, вывод

ПРАВКА 2: Я уже изучил .Альтернатива toString(), однако, поскольку я выполняю итерацию по массиву объектов, и конкретное поле этого объекта может иметь значение типа string / integer / boolean. Применение .toString() для всех из них не кажется оптимальным.

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

1. «Применение . toString() для всех из них не кажется оптимальным » — Используйте { String( value ) } тогда. Нет ничего более оптимального и универсального, чем это.

Ответ №1:

 Boolean Value: { ipsumText.toString() }
  

или

 Boolean Value: { String(ipsumText) }
  

или

 Boolean Value: { ''   ipsumText }
  

или

 {`Boolean Value: ${ipsumText}`}
  

или

 Boolean Value: { JSON.stringify(ipsumText) }
  

Я предпочитаю второй вариант. Универсальный, быстрый, работает для всех примитивных типов: Boolean( smth ) , Number( smth ) .

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

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

2. React не допускает объект в качестве значений, но Vue показывает фактические значения, кроме undefined и null. Я полагаю, что он использует toString underhood, но почему react этого не сделает?

3. @Naren Angular в этом отношении работает так же, как в Vue, что, я думаю, является желательным поведением по умолчанию.

Ответ №2:

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

 var ipsumText = true;

ReactDOM.render(
  <div>
     Boolean Value: {ipsumText   ''}
  </div>,
  document.getElementById('impl')
);
  

Или вы можете сделать это, присваивая bool значение переменной:

 var ipsumText = true   '';

ReactDOM.render(
  <div>
     Boolean Value: {ipsumText}
  </div>,
  document.getElementById('impl')
);
  

Если ваша переменная может иметь не логическое значение, вам следует преобразовать ее в логическое:

 // `ipsumText` variable is `true` now.
var ipsumText = !!'text';
  

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

1. В случае, если значение не является логическим, я бы хотел показать его как есть.

2. В этом случае используйте это условие: var ipsumText = typeof value === 'boolean' ? value '' : value; Мы проверяем, является ли переменная логической, когда преобразуем ее в строку, в противном случае отображая ее как есть.

Ответ №3:

 <select>
    <option value={row.feature_product ? true: true || row.feature_product ? false: false}>
    {`${row.feature_product}`}
    </option>
    <option value={row.feature_product ? false: true || row.feature_product ? true: false}>
    {`${row.feature_product ? false: true}` || `${row.feature_product ? true: false}`}
    </option>
</select>
  

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

1. Пожалуйста, объясните свой ответ.