Я знаю, что SetState принимает обратный вызов, который я использую. Однако по какой-то причине он не запускается после обновления состояния. Я делаю что-то неправильно?
handleInputChange = (event) => {
this.setState({
[name]: event.target.value
});
if (event.target.value.length > 1) {
this.getSuggestions();
this.setState({
query: event.target.value,
}, () => this.getCoordinates)
}
getCoordinates = () =>{
const geocoder = new google.maps.Geocoder();
geocoder.geocode( {"address":this.state.query}, this.onSuccessGetAddress)
}
Есть два входа, которые обновляют разные вещи. Второй имеет валидацию (должен быть длиннее 1 символа)
Вы предоставили обратный вызов, который возвращает функцию this.getCoordinates
:
() => this.getCoordinates
Вы хотите предоставить обратный вызов, который вызывает this.getCoordinates
:
() => this.getCoordinates()
или
this.getCoordinates
Чем последняя отличается от уже написанной?
Последний передает функцию как ссылку для выполнения, ваша версия передает функцию, которая возвращает вашу функцию, но которая никогда не вызывается впоследствии.
Последний эквивалентен () => { const geocoder ... }
(точно так, как вы определили), который нужно вызвать только один раз для выполнения внутреннего кода. Это означает, что ваш эквивалентен () => () => { const geocoder ... }
, который нужно «вызвать дважды», чтобы выполнить внутренний код.
Почему два отдельных вызова setState?