Реактивную функцию дозу не переназначить (разрешить) или вставить в массив - PullRequest
0 голосов
/ 12 января 2019

Hallo React и Js программист, у меня есть вопрос, связанный с функцией scoop или переменной

У меня есть этот код здесь, чтобы получить Postion от gecoder

getPosition = pos => {
    let address;
    Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
        if (!err) {
            const data = (geoData.results[0].formatted_address);
            address = data;
        }
    }, apiKey);
    console.log(address);// undefined
}

и я попытался использовать массив и вставить в него результат

const address = [];
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
    if (!err) {
        const data = (geoData.results[0].formatted_address);
        address.push(data);
    }
}, apiKey);
console.log(address[0]);

есть ли способ получить значение из данных, которые являются строкой? спасибо

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Если вы используете метод getPosition внутри компонента класса реакции, то вы можете создать состояние address и сохранить в нем данные следующим образом

import React from 'react';

export default class GetPosition extends React.Component {

    state = {
        address: []
    }

    getPosition = pos => {
        Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
            if (!err) {
                const data = (geoData.results[0].formatted_address);
                this.setState({address: [...this.state.address, data]})
            }
        }, apiKey);
    }

    render() {
        const address = this.state
        console.log(address)

        return (
            <div>{address[0]}</div>
        );
    }
}

И если это не метод компонента класса react, вы можете хранить данные в глобальном массиве address следующим образом

const address = [];

getPosition = pos => {
    Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
        if (!err) {
            const data = (geoData.results[0].formatted_address);
            address.push(data);
       }
    }, apiKey);
}

console.log(address[0]);

Я надеюсь, что это поможет вам, и вы должны изучить это Понимание области применения в Javascript

0 голосов
/ 12 января 2019

Вы регистрируете переменные до того, как они будут определены / изменены обратными вызовами, таким образом, неожиданные результаты.

Это должно работать:

getPosition = pos => {
  let address;
  Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
    if (!err) {
      const data = (geoData.results[0].formatted_address);
      address = data;
    }

    // log INSIDE the callback!
    console.log(address);

  }, apiKey);
}

Это тоже:

// callback is not executed yet, don't log!

const address = [];
Geocoder.reverseGeocode(pos.latitude, pos.longitude, (err, geoData) => {
  if (!err) {
    const data = (geoData.results[0].formatted_address);
    address.push(data);
  }

  // logs INSIDE the callback!
  console.log(address[0]);

}, apiKey);

// callback is not executed yet, don't log!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...