我正在使用React-chosen(https://github.com/chenglou/react-chosen,它是jQuery Chosen插件https://harvesthq.github.io/chosen/的React包装器)。
我对多选元素有疑问。
如果我这样做(在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>
)
}
然后一切正常(我基本上是对API进行AJAX调用,并根据结果构建一个包含多个可能值的下拉选择列表)。
但是,为了减少代码大小,我想将选择列表构建为单独的组件,如此处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
为true,则提供给的multiple
道具必须是一个数组。请检查Chosen
的渲染方法。”任何想法为什么会发生>
最佳答案
您使用多选,因此value
属性必须是一个数组(用于多选)
为place_childSelectValue
使用一个数组,或者只是将他放入单个元素数组中:
[this.state.place_childSelectValue]
关于javascript - react 选择引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26204962/