В компоненте React для <select>
меню мне нужно установить selected
атрибут для опции, которая отражает состояние приложения.
В render()
, то optionState
передается от состояния владельца к компоненту SortMenu. Значения параметров передаются как props
из JSON.
render: function() {
var options = [],
optionState = this.props.optionState;
this.props.options.forEach(function(option) {
var selected = (optionState === option.value) ? ' selected' : '';
options.push(
<option value={option.value}{selected}>{option.label}</option>
);
});
// pass {options} to the select menu jsx
Однако это вызывает синтаксическую ошибку при компиляции JSX.
Это избавляет от синтаксической ошибки, но, очевидно, не решает проблему:
var selected = (optionState === option.value) ? 'selected' : 'false';
<option value={option.value} selected={selected}>{option.label}</option>
Я также попробовал это:
var selected = (optionState === option.value) ? true : false;
<option value={option.value} {selected ? 'selected' : ''}>{option.label}</option>
Есть ли рекомендуемый способ решения этой проблемы?
javascript
reactjs
Кантера
источник
источник
Ответы:
React автоматически распознает логические значения для этой цели, поэтому вы можете просто написать (примечание: не рекомендуется)
и он выведет «выбрано» соответственно.
Однако React делает это еще проще для вас. Вместо определения
selected
каждого параметра вы можете (и должны) просто написатьvalue={optionsState}
сам тег select :Для получения дополнительной информации см. Тег React select doc .
источник
onChange={this.handleSelect}
и установить значение состояния для вашего компонента, например: 'handleSelect: function () {this.setState ({value: event.target.value});} `Это приведет к переопределению выбранного компонента с новым выбранный пункт. Надеюсь, это поможет вам.value
опора для a<select>
может быть массивом, если вы егоmultiselect
включили.defaultValue
для инициализацииВы можете делать то, что предупреждает React, когда вы пытаетесь установить свойство «selected» для
<option>
:Таким образом, вы можете использовать
options.value
наdefaultValue
ваш выбористочник
Вот полное решение, которое включает в себя лучший ответ и комментарии под ним (что может помочь кому-то изо всех сил собрать все вместе):
ОБНОВЛЕНИЕ ДЛЯ ES6 (2019) - использование функций стрелок и разрушение объектов
в основном компоненте:
включенный компонент (который теперь является функционалом без сохранения состояния):
ПРЕДЫДУЩИЙ ОТВЕТ (используя bind):
в основном компоненте:
включенный компонент (который теперь является функционалом без сохранения состояния):
основной компонент поддерживает выбранное значение для фруктов (в состоянии), включенный компонент отображает элемент выбора, и обновления передаются обратно в основной компонент для обновления его состояния (которое затем возвращается к включенному компоненту для изменения выбранного значения).
Обратите внимание на использование свойства prop, которое позволяет вам объявлять один метод handleChange для других полей в той же форме независимо от их типа.
источник
this.handleChange.bind(this);
должна бытьthis.handleChange = this.handleChange.bind(this)
;Вот последний пример того, как это сделать. От реагировать документы , плюс автоматически связывающий синтаксис метода "жирная стрелка".
источник
Просто добавьте в качестве первого варианта вашего выбора тега:
Это станет по умолчанию, и когда вы выберете действительный вариант будет установлен в вашем штате
источник
источник
У меня была проблема с
<select>
тегами, которые не обновляются до правильных<option>
при изменении состояния. Моя проблема заключалась в том, что если вы дважды рендеритесь подряд, первый раз без предварительного выбора,<option>
а второй с одним, то<select>
тег не обновляется при втором рендере, а остается по умолчанию первым.Я нашел решение этого с помощью ссылок . Вам нужно получить ссылку на ваш
<select>
узел тега (который может быть вложен в некоторый компонент), а затем вручную обновитьvalue
свойство в нем, вcomponentDidUpdate
хуке.источник
Опубликовать аналогичный ответ для MULTISELECT / optgroups:
источник
У меня есть простое решение, следуя основному HTML.
.text-hide
это класс начальной загрузки, если вы не используете загрузчик, вот вы:источник
Я обошел похожую проблему, установив defaultProps:
<select value="this.props.propName" ...
Так что теперь я избегаю ошибок при компиляции, если моя опора не существует до монтирования.
источник
value
реквизит для поля формы безonChange
обработчика. Это сделает поле только для чтения. Если поле должно быть изменчивым, используйтеdefaultValue
. В противном случае, установите либоonChange
илиreadOnly
.