我正在使用React-selected(https://github.com/chenglou/react-chosen,jQuery Chosen插件的React包裝器,https://harvesthq.github.io/chosen/)。 我遇到了多選元素的問題。反應選擇引發錯誤
如果我做這樣的事情(一個React.createClass
調用內部):
loadDataFromServer: function() {
$.ajax({
url: '/api/users/',
dataType: 'json',
success: function(data) {
for (var i = 0; i < data.length; i++) {
var option = data[i];
var val = [option.id];
this.state.options.push(
<option key={i} value={val}>{option.name}</option>
);
}
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
getInitialState: function() {
return {data: [], options: []};
},
componentDidMount: function() {
this.loadDataFromServer();
},
render: function() {
return (
<form className="well base_well new_task_well" onSubmit={this.handleSubmit}>
<Chosen width="300px" data-placeholder="Select..." multiple>
{this.state.options}
</Chosen>
<button type="button" className="btn add_button" id="add_new_task_btn" type="submit">Add</button>
</form>
)
}
然後一切工作正常(我基本上做一個AJAX調用的API,並建立基於可能多個值的下拉選擇列表結果)。
然而,爲了減少代碼大小,我想建立選擇列表作爲一個單獨的組件,如這裏所描述https://stackoverflow.com/a/25818571/2486678
我構建組件是這樣的:
var multipleSelect = React.createClass({
propTypes: {
url: React.PropTypes.string.isRequired
},
getInitialState: function() {
return {
options: []
}
},
componentDidMount: function() {
$.ajax({
url: this.props.url,
success: this.successHandler
})
},
successHandler: function(data) {
for (var i = 0; i < data.length; i++) {
var option = data[i];
this.state.options.push(
<option key={i} value={option.value}>{option.name}</option>
);
}
},
render: function() {
return this.transferPropsTo(
<Chosen width="300px" data-placeholder="Select..." multiple>
{this.state.options}
</Chosen>
)
}
});
,然後在父組件的render
方法,我「插入」的multipleSelect
組件到表單:
<multipleSelect url="/api/places"
value={this.state.place_childSelectValue} onChange={this.place_changeHandler}
/>
雖然這工作罰款只有可能的一個值Chosen
元素(不multiple
道具通過),如果我嘗試這種方法對於具有多個可能值列表,我得到這個錯誤:
「警告:提供給<選擇value
道具>必須是數組,如果multiple
爲真。檢查的Chosen
渲染方法。」
任何想法,爲什麼正在發生>
是'place_childSelectValue'陣列如果不是這樣,它需要你也不要存放在狀態的描述,你應該將數據存儲'successHandler?: FUNC (data){this.setState({data:data})}'並在渲染中創建'