#javascript #reactjs #google-maps #state
#javascript #reactjs #google-карты #состояние
Вопрос:
Я пытаюсь сохранить значение из функции обратного вызова в состоянии реакции, но продолжаю получать ошибки.
Я использую @react-google-maps / api и хочу сохранить GeoJSON в состоянии, поэтому в своем коде я пытаюсь получить доступ к ‘obj’ и сделать его пригодным для использования вне обратного вызова.
Это мой код…
getGeoJson = (map, maps) => {
//toGeoJson() takes a callback
map.data.toGeoJson(function(obj){
return obj
});
//Trying to store in state like this...
this.setState({
value: obj
});
};
Ссылки
.toGeoJson()
Комментарии:
1. Пробовал let a = function (obj) { return obj; }; map.data.toGeoJson(a); console.log(a); Но это возвращает функцию, которая сама
2.
obj
является параметром в функции обратного вызова, он не будет доступен снаружи, это может быть причиной ошибки.
Ответ №1:
Вам нужно установить value
обратный вызов. Здесь функция стрелки важна, потому что вы можете сохранить контекст без привязки.
getGeoJson = (map, maps) => {
map.data.toGeoJson((obj) => {
this.setState({
value: obj
});
});
};
Ответ №2:
Переменная obj имеет область действия функции, вы пытаетесь установить ее значение вне функции обратного вызова, по этой причине значение, вероятно, устанавливается в undefined или null или что-то в этих строках.
Вам нужно будет сохранить переменную obj в состояние внутри функции обратного вызова. Вот так:
getGeoJson = (map, maps) => {
//toGeoJson() takes a callback
map.data.toGeoJson(obj => {
return obj
this.setState({
value: obj
});
});
};
Однако, по какой-то причине, если вы не хотите устанавливать его значение в функции обратного вызова, вы можете вернуть значение obj из функции обратного вызова, но вам также необходимо записать возвращаемое значение в другую переменную, прежде чем вы сможете сохранить его в состоянии, например, так:
getGeoJson = (map, maps) => {
//toGeoJson() takes a callback
const object = map.data.toGeoJson(function(obj){
return obj
});
this.setState({
value: object
});
};