내 상황은 다음과 같습니다.
- this.handleFormSubmit ()에서 this.setState () 실행 중입니다.
- this.handleFormSubmit () 내부에서 this.findRoutes (); -this.setState ()의 성공적인 완료에 따라 다릅니다.
- this.setState (); this.findRoutes가 호출되기 전에 완료되지 않습니다 ...
- this.findRoutes ()를 호출하기 전에 this.handleFormSubmit () 내부의 this.setState ()가 완료되기를 어떻게 기다리나요?
수준 이하의 솔루션 :
- componentDidUpdate ()에 this.findRoutes () 넣기
- 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>
);
}
});