在将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>
答案 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>