এখানে আমার পরিস্থিতি:
- আমি এই.সেটস্টেট () চালাচ্ছি
- এই.হ্যান্ডলফর্মসুবিট () এর ভিতরে, আমি এই কল করছি indফাইন্ডআরটস (); - যা এই.সেটস্টেটের সফল সমাপ্তির উপর নির্ভর করে ()
- this.setState (); এটি শেষ হওয়ার আগেই শেষ হয় না ind
- আমি এই.সেটল স্টোর () এর ভিতরে কীভাবে অপেক্ষা করতে পারি? এই.ফ্যান্ডারউইটস () কল করার আগে এটি শেষ করার জন্য?
একটি সাবপার সমাধান:
- এটি.ফাইন্ডআরউটস () কে উপাদান ডিডআপডেটে () লাগানো হচ্ছে
- এটি গ্রহণযোগ্য নয় কারণ ফাইন্ডআরটস () ফাংশনটি অপ্রাসঙ্গিকভাবে আরও বেশি রাষ্ট্রীয় পরিবর্তন আসবে। অপ্রাসঙ্গিক স্থিতি আপডেট করা হলে আমি সন্ধানের রুটস () ফাংশনটি ট্রিগার করতে চাই না।
দয়া করে নীচে কোড স্নিপেট দেখুন:
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>
);
}
});