Реагируйте: Установите значения в Окне, возвращающемся как неопределенный

Я устанавливаю скрипт в своем HTML для геоглагина, присваиваю результаты окну и пытаюсь получить доступ к переменным в компоненте. Проблема в том, что в компоненте я могу console.log(окно) и видеть переменные, но любая запись с точкой приводит к неопределенности.

Вот сценарий в моем HTML:

<script type="text/javascript">
   setupGeo = (o) => {
     //This is one way I've tried it, setting a Geo object
     window.Geo = {};
     Geo.geoplugin_city = o.city;
     Geo.geoplugin_region = o.region;
     console.log(Geo.geoplugin_city); //works and returns my city
     console.log(Geo.geoplugin_region); //works and return my state

     //This is a second way I've tried it, assigning it to a function that 
        //returns the variable
     window.geoplugin_latitude = function() { return o.lat; };
     window.geoplugin_longitude = function() { return o.lon; };
     console.log(window.geoplugin_longitude); //returns function
     console.log(window.geoplugin_longitude); //return function 
   }
</script>
<script type="text/javascript" src="//extreme-ip-lookup.com/json/? 
  callback=setupGeo" async></script>

Как видите, скрипт работает как задумано. Я попробовал два разных способа и включил их оба в качестве примеров.

В моем компоненте React я использую метод ComponentDidMount для получения значений и в конечном итоге установлю их состояние.

Вот проблема: я могу утешить окно и видеть все значения, но когда я пытаюсь поставить точку в нотации, я получаю неопределенное значение.

componentDidMount() {

    console.log('componentmounted', window)
    // Window ...{Geo:{geoplugin_city: "MyCity", geoplugin_region: "MyState"}}
    // ...geoplugin_latitude: f() ... geoplugin_longitude: f()

    console.log('componentmounted', window.Geo) // undefined
    console.log('componentmounted', window.geoplugin_latitude) //returns 
      //function
    console.log('componentmounted', window.geoplugin_latitude()) //gives error 
      //that window.geoplugin_latitude isn't a function
}

Итак, я вижу нужные переменные окна, я просто получаю доступ к ним внутри объекта Window. Я провел исследование о том, как использовать объект Window, но это не проблема, поскольку я могу видеть переменные в объекте Window. Они просто становятся неопределенными, когда я пытаюсь добраться до них для использования. Я также пытался с ComponentWillMount и даже UNSAFE_componentWillMount(), но это не проблема, так как я получаю переменные в Window.

Любые идеи о том, как работает React, что делает это проблемой, и как я могу войти в окно, чтобы получить переменные?

0 ответов

Другие вопросы по тегам