Как сохранить значение из функции обратного вызова в состоянии реакции? (Карты Google)

#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
    });
};