Почему состояние все еще нулевое, даже после его установки? - PullRequest
0 голосов
/ 21 сентября 2019

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

Я мог бы просто использовать экземпляр объекта возражения вместо константы, но мне посоветовали не делать этого.

import { useState, useEffect } from "react";
import { loadModules } from "@esri/react-arcgis";

const TestLayer = props => {
  const [layer, setLayer] = useState(null);
  useEffect(() => {
    loadModules(["esri/layers/GraphicsLayer"])
      .then(([GraphicsLayer]) => {
        const graphicsLayer = new GraphicsLayer();
        setLayer(graphicsLayer);
        props.map.layers.add(layer); //layer is still null
      });
  }, []);

  return null;
};

export default TestLayer;

1 Ответ

1 голос
/ 21 сентября 2019

Да, это асинхронно, как предлагают комментарии.Хорошей новостью является то, что когда вы пытаетесь получить к нему синхронный доступ, это то же самое место, где у вас есть доступ к исходному объекту, поэтому вы можете просто использовать его напрямую:

import { useState, useEffect } from "react";
import { loadModules } from "@esri/react-arcgis";

const TestLayer = props => {
  const [layer, setLayer] = useState(null);
  useEffect(() => {
    loadModules(["esri/layers/GraphicsLayer"]).then(([GraphicsLayer]) => {
      const graphicsLayer = new GraphicsLayer();
      setLayer(graphicsLayer);
      props.map.layers.add(graphicsLayer); // Don't need to access state here
    });
  }, []);

  return null;
};

export default TestLayer;
...