Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react中的回调上触发handleSubmit_Javascript_Reactjs - Fatal编程技术网

Javascript 如何在react中的回调上触发handleSubmit

Javascript 如何在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(

我需要等待回调,然后再将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(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>