如何在回调中触发handleSubmit

时间:2017-09-02 16:41:06

标签: javascript reactjs

在将place_id推送到BrowserHistory

之前,我需要等待回调
handleSubmit(event) {
    event.preventDefault();
    browserHistory.push(`/place_id/`+this.state.place.place_id);
}

当选择一个地点时,表单会自动提交(这很好),但是在回调之前this.state.place仍为空。

<form onSubmit={ this.handleSubmit.bind(this) }>
    <Autocomplete
        onPlaceSelected={(place) => {
            this.setState({place: place});
        }}
    />
</form>

3 个答案:

答案 0 :(得分:2)

您可以做的是在修改状态后使用回调触发更新:

String selectSQL = "SELECT ?,supplier_name FROM supplier WHERE supplier_id = ?";
        PreparedStatement preparedStatement = con.prepareStatement(selectSQL);
        preparedStatement.setString(1, "supplier_id");
        preparedStatement.setInt(2, 1);
        ResultSet rs2 = preparedStatement.executeQuery();

        while (rs2.next()) {
            String userid = rs2.getString(1);
            String username = rs2.getString(2);
            System.out.println(userid);
            System.out.println(username);
        }
        con.close();
    };

您可以看到here this.setState({place: place}, () => browserHistory.push(`/place_id/`+this.state.place.place_id)); 无法保证立即投放。

答案 1 :(得分:2)

您可以使用以下内容:

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>

setState方法的回调会在之后调用形式的submit将地点的值设置为状态,并且一旦它在那里 - {我会在browserHistory.push内调用{1}},因为您在handleSubmit内有一个位置。

答案 2 :(得分:1)

为什么不简单

changeRoute(place) {
  browserHistory.push(`/place_id/`+place.place_id);
}

然后

  <form ref={(c) => this.frm = c}>
    <Autocomplete onPlaceSelected={this.changeRoute} />
  </form>