使用refs
您可以访问输入字段,并且对于选择,您必须在更改时进行处理。您不需要处理所有事情,即使您使用的是 Redux,您也无法修改状态,因此您无法处理事件并调用this.setState(...);
基本上,您可以直接使用访问该值,this.refs.refName.value
或者您可以使用一个函数来设置这样的值ref={(input) => { this.input = input; }}
,然后通过this.input
.
你可以在这里阅读完整的文档。
对于默认值 on select
,根据ReactJS 文档使用value={this.state.value}
是可以的。如果您收到警告,则可能是由其他原因引起的。
如果您使用的是像 Redux 这样的框架,您不能(或不应该)修改状态,那么您应该分派一个动作handleChange
而不是设置状态。
但是如果你不想使用handlres
两者refs
,那么你应该考虑从 ReactJS 转移。我更喜欢使用 refs,因为它感觉更干净。
这里有一个工作示例:
var Hello = React.createClass({
handleSave: function(){
alert('name: ' + this.refs.input.value)
alert('selectValue: ' + this.state.selectValue)
},
render: function() {
var item = {
"name":"James",
"dates": {
"contract": [
{"id":1,"name":"1 month","value":false},
{"id":2,"name":"2 months","value":true}
]
}}
return (
<div>
<input type="text" value={item.name} ref={'input'}/>
<select className="form-control" onChange={this.handleChange.bind(this)} >
{item.dates.contract.map(obj =>
<option value={obj.id} selected={obj.value}>{obj.name}</option>
)}
</select>
<button onClick={this.handleSave.bind(this)}>Save form</button></div>)
},
handleChange:function(e){
this.setState({selectValue: e.target.value});
}
});
ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);
查询
ReactJS 团队不推荐使用 JQuery,因为 JQuery 完全剥夺了 ReactJS 对 DOM 的控制,这可能会导致不良行为。假设我们选择了 ReactJS 来为我们控制 DOM。实际上根本不需要使用 JQuery。