Событие изменения инициируется <select>
элементом, а не <option>
элементом. Однако это не единственная проблема. То, как вы определили change
функцию, не вызовет повторного рендеринга компонента. Кажется, что вы, возможно, еще не полностью поняли концепцию React, поэтому, возможно, «Thinking in React» поможет.
Вы должны сохранить выбранное значение как состояние и обновлять состояние при изменении значения. Обновление состояния вызовет повторную визуализацию компонента.
var MySelect = React.createClass({
getInitialState: function() {
return {
value: 'select'
}
},
change: function(event){
this.setState({value: event.target.value});
},
render: function(){
return(
<div>
<select id="lang" onChange={this.change} value={this.state.value}>
<option value="select">Select</option>
<option value="Java">Java</option>
<option value="C++">C++</option>
</select>
<p></p>
<p>{this.state.value}</p>
</div>
);
}
});
React.render(<MySelect />, document.body);
Также обратите внимание, что <p>
элементы не имеют value
атрибута. React / JSX просто копирует хорошо известный синтаксис HTML, он не вводит настраиваемые атрибуты (за исключением key
и ref
). Если вы хотите, чтобы выбранное значение было содержимым <p>
элемента, просто поместите его внутрь, как вы бы сделали с любым статическим содержимым.
Узнайте больше об обработке событий, управлении состоянием и формой:
value
будучи таким же, как внутренний текст?event.target.textContent
event.target.slectedOptions[0].label
.источник
React Hooks (16.8+):
источник
Спасибо Феликсу Клингу, но его ответ нуждается в небольшом изменении:
источник
this.change.bind
вonChange
?Если вы используете select как inline для другого компонента, вы также можете использовать, как указано ниже.
А в компоненте, где используется select, определите функцию для обработки onChange, как показано ниже:
источник
источник