ReactJS onChange 事件处理程序
ReactJS onChange event handler
我对 React 的事件处理程序有些困惑
我有一个这样的组件,handleChange
处理 onChange
事件:
var SearchBar = React.createClass({
getInitialState(){
return {word:''};
},
handleChange: function(event){
this.setState({word:event.target.value});
alert(this.state.word);
},
render: function () {
return (
<div style={{width:'100%',position:'0',backgroundColor:'darkOrange'}}>
<div className="header">
<h1>MOVIE</h1>
</div>
<div className="searchForm">
<input className="searchField" onChange={this.handleChange}
value={this.state.word} type="text" placeholder="Enter search term"/>
</div>
</div>
);
}
});
它确实有效,但不是我期望的方式。在文本字段中,当我输入第一个字符时,它会提示空字符串,当输入第二个字符时,它会提示只有第一个字符的字符串,依此类推,字符串长度为 n,它会提示长度为 n-1 的字符串
我这里做错了什么?我该如何解决?
我认为这与 React 内部的状态处理有关。
我可以提供两个选项来处理它。
或者:
handleChange: function(event) {
this.setState({word: event.target.value});
window.setTimeout(function() {
alert(this.state.word);
}.bind(this));
}
或者:
alertCurrentValue() {
alert(this.state.word);
},
render: function () {
this.alertCurrentValue();
return ( ... )
}
这样使用,
Js:
this.setState({word:event.target.value}, function() {
alert(this.state.word)
});
工作Jsbin
Praveen Raj 的回答绝对是正确的方法。这是我从 official React website 中找到的关于为什么你应该在回调中访问 this.state 而不是在 setState():
之后访问的文档
setState() does not immediately mutate this.state but creates a pending state transition. Accessing this.state after calling this method can potentially return the existing value.
我对 React 的事件处理程序有些困惑
我有一个这样的组件,handleChange
处理 onChange
事件:
var SearchBar = React.createClass({
getInitialState(){
return {word:''};
},
handleChange: function(event){
this.setState({word:event.target.value});
alert(this.state.word);
},
render: function () {
return (
<div style={{width:'100%',position:'0',backgroundColor:'darkOrange'}}>
<div className="header">
<h1>MOVIE</h1>
</div>
<div className="searchForm">
<input className="searchField" onChange={this.handleChange}
value={this.state.word} type="text" placeholder="Enter search term"/>
</div>
</div>
);
}
});
它确实有效,但不是我期望的方式。在文本字段中,当我输入第一个字符时,它会提示空字符串,当输入第二个字符时,它会提示只有第一个字符的字符串,依此类推,字符串长度为 n,它会提示长度为 n-1 的字符串
我这里做错了什么?我该如何解决?
我认为这与 React 内部的状态处理有关。
我可以提供两个选项来处理它。
或者:
handleChange: function(event) {
this.setState({word: event.target.value});
window.setTimeout(function() {
alert(this.state.word);
}.bind(this));
}
或者:
alertCurrentValue() {
alert(this.state.word);
},
render: function () {
this.alertCurrentValue();
return ( ... )
}
这样使用,
Js:
this.setState({word:event.target.value}, function() {
alert(this.state.word)
});
工作Jsbin
Praveen Raj 的回答绝对是正确的方法。这是我从 official React website 中找到的关于为什么你应该在回调中访问 this.state 而不是在 setState():
之后访问的文档setState() does not immediately mutate this.state but creates a pending state transition. Accessing this.state after calling this method can potentially return the existing value.