Javascript 如何在react中的回调上触发handleSubmit
我需要等待回调,然后再将place_id推到BrowserHistoryJavascript 如何在react中的回调上触发handleSubmit,javascript,reactjs,Javascript,Reactjs,我需要等待回调,然后再将place_id推到BrowserHistory handleSubmit(event) { event.preventDefault(); browserHistory.push(`/place_id/`+this.state.place.place_id); } 当选择一个位置时,表单会自动提交(这很好),但this.state.place在回调之前仍然为null <form onSubmit={ this.handleSubmit.bind(
handleSubmit(event) {
event.preventDefault();
browserHistory.push(`/place_id/`+this.state.place.place_id);
}
当选择一个位置时,表单会自动提交(这很好),但this.state.place在回调之前仍然为null
<form onSubmit={ this.handleSubmit.bind(this) }>
<Autocomplete
onPlaceSelected={(place) => {
this.setState({place: place});
}}
/>
</form>
{
this.setState({place:place});
}}
/>
修改状态后,您可以使用回调触发更新:
this.setState({place: place}, () => browserHistory.push(`/place_id/`+this.state.place.place_id));
您可以看到,
setState
不能保证立即运行。您可以使用以下方法:
handleSubmit(event) {
if (this.state.place) {
browserHistory.push(`/place_id/`+this.state.place.place_id);
} else {
event.preventDefault();
}
}
这是组件:
<form onSubmit={ this.handleSubmit.bind(this) } ref={(c) => this.frm = c}>
<Autocomplete
onPlaceSelected={(place) => {
this.setState({place: place}, () => {this.frm.submit()});
}}
/>
</form>
this.frm=c}>
{
this.setState({place:place},()=>{this.frm.submit()});
}}
/>
setState
方法的回调将在place的值设置为状态后调用表单的submit
,一旦它到了那里,浏览器history.push将在handleSubmit
中调用,因为你在中有一个位置。state
为什么不简单呢
changeRoute(place) {
browserHistory.push(`/place_id/`+place.place_id);
}
然后
this.frm=c}>
哈哈,我正在处理onPlaceSelected回调中的状态更改,就像答案所说的那样。我会继续研究的!谢谢你的链接:)完美答案:)
<form ref={(c) => this.frm = c}>
<Autocomplete onPlaceSelected={this.changeRoute} />
</form>