React.js,在触发函数之前等待setState完成?

这是我的情况:

  • 在this.handleFormSubmit()上,我正在执行this.setState()
  • 在this.handleFormSubmit()内部,我正在调用this.findRoutes(); -取决于this.setState()的成功完成
  • this.setState(); 在this.findRoutes被调用之前没有完成…

较差的解决方案:

  • 将this.findRoutes()放在componentDidUpdate()中
  • 这是不可接受的,因为将会有更多与findRoutes()函数无关的状态更改。我不想在不相关的状态更新时触发findRoutes()函数。

请参见下面的代码段:

handleFormSubmit: function(input){

// Form Input

this.setState({

originId: input.originId,

destinationId: input.destinationId,

radius: input.radius,

search: input.search

})

this.findRoutes();

},

handleMapRender: function(map){

// Intialized Google Map

directionsDisplay = new google.maps.DirectionsRenderer();

directionsService = new google.maps.DirectionsService();

this.setState({map: map});

placesService = new google.maps.places.PlacesService(map);

directionsDisplay.setMap(map);

},

findRoutes: function(){

var me = this;

if (!this.state.originId || !this.state.destinationId) {

alert("findRoutes!");

return;

}

var p1 = new Promise(function(resolve, reject) {

directionsService.route({

origin: {'placeId': me.state.originId},

destination: {'placeId': me.state.destinationId},

travelMode: me.state.travelMode

}, function(response, status){

if (status === google.maps.DirectionsStatus.OK) {

// me.response = response;

directionsDisplay.setDirections(response);

resolve(response);

} else {

window.alert('Directions config failed due to ' + status);

}

});

});

return p1

},

render: function() {

return (

<div className="MapControl">

<h1>Search</h1>

<MapForm

onFormSubmit={this.handleFormSubmit}

map={this.state.map}/>

<GMap

setMapState={this.handleMapRender}

originId= {this.state.originId}

destinationId= {this.state.destinationId}

radius= {this.state.radius}

search= {this.state.search}/>

</div>

);

}

});

回答:

setState()有一个可选的回调参数可用于此目的。您只需要对此稍作更改即可:

// Form Input

this.setState(

{

originId: input.originId,

destinationId: input.destinationId,

radius: input.radius,

search: input.search

},

this.findRoutes // here is where you put the callback

);

请注意,作为第二个参数,findRoutes到的setState()呼叫现在位于呼叫内部。

没有,()因为您正在传递函数。

以上是 React.js,在触发函数之前等待setState完成? 的全部内容, 来源链接: utcz.com/qa/398029.html

回到顶部