Я использую React для создания контролируемого элемента select. Мое приложение проверяет новое значение параметра, выбранное пользователем, и затем обновляет это значение для элемента. Проверка занимает некоторое время и поведение наблюдает выглядят следующим образом:Возвращаемый элемент управления возвращается к первому варианту
- Пользователь выбирает опцию
- Элемент изменяет выбранный параметр для индекса 0
- После того, как период проверки закончился, обновление самого элемента к новому значению
Я не понимаю, почему элемент возвращается к первому индексу, и как я могу предотвратить это (за исключением, установив значение немедленно, которое является нежелательным в моем приложении)
Используйте эту JSFiddle, чтобы увидеть это поведение (выберите option2) https://jsfiddle.net/qo39g2j4/
var Select = React.createClass({
render: function() {
return (
<select id="my-select" value={this.props.value} onChange={this.props.onChange}>
<option value="Option1">Option1</option>
<option value="Option2">Option2</option>
<option value="Option3">Option3</option>
</select>
);
}
});
var Wrapper = React.createClass({
getInitialState: function() {
return {value: "Option3"};
},
onChange: function (event) {
var value = event.target.value;
setTimeout(function() {
this.setState({value: value});
}.bind(this), 1000); // this simulates the validation period
},
render: function() {
return (
<Select
value={this.state.value}
onChange={this.onChange}/>
);
}
});
ReactDOM.render(
<Wrapper/>,
document.getElementById("container")
);
изменяющегося значение DefaultValue бы сделайте это неконтролируемым компонентом, не позволяющим мне изменять его значение, если проверка не выполняется. event.preventDefault(), похоже, не работает в JSFiddle, а реальное приложение –
@AmitFridman, возможно, вы можете попробовать дважды установить 'state' onChange'. перед валидацией и после проверки. – oobgam