【发布时间】:2018-11-15 09:43:31
【问题描述】:
the React tutorial中有如下代码:
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
还有a warning关于setState方法:
setState() 并不总是立即更新组件。它可能 批处理或推迟更新。这使得阅读 this.state 在调用 setState() 之后,这是一个潜在的陷阱。
问:是否可能出现以下情况:
- handleChange 被触发;
- setState 在 React 中排队;
- handleSubmit 被触发,它读取 this.state.value 的过时值;
- setState 实际处理完毕。
或者有某种保护措施防止这种情况发生?
【问题讨论】:
标签: javascript reactjs