這裏的一個SSCCE來說明我的問題:爲什麼ReactJS會抑制<input>元素的變化,但不會在例如<select>元件
const React = require('react');
const App = React.createClass({
getInitialState: function() {
return {
text: 'foo',
selection: 'apples'
};
}
, render: function() {
return (
<div>
<div>
<input type='text' value={this.state.text}/>
</div>
<select>
<option value='bananas' selected={this.state.selection==='bananas'}>bananas</option>
<option value='apples' selected={this.state.selection==='apples'} >apples </option>
<option value='onions' selected={this.state.selection==='onions'} >onions </option>
</select>
</div>
);
}
});
呈現時將上述陣營部件,顯示器(不出所料)以下觀點:
該模型考慮到如預期。
當您嘗試鍵入<input>
元素時,什麼都不會發生。解釋是ReactJS使用單向流程,並且您必須添加onchange
監聽器來更新模型等。這很好。
我不明白的是爲什麼ReactJS防止<input>
元素更改,並迫使其始終反映向下流動到它的模型值,而在同一時間,它可以讓我改變<select>
元素:
顯然,我的心智模式是缺乏。我錯過了什麼?
您鏈接的頁面描述了在'select'元素中使用'value'屬性(與在'option'選項元素中使用'selected'屬性相反)它「更方便[..],因爲你只需要在一個地方更新它」。沒有解釋或指示你的答案建議的事實,在'select'元素中硬編碼'value'屬性會創建一個受控組件,而在'option'元素中'selected'屬性的硬編碼則不會。 –