为什么即使设置状态后状态仍然为空?

时间:2019-09-21 18:23:06

标签: reactjs esri

我正在尝试设置一个对象,然后立即使用它,但这是说它为null。我可以在调试模式下观察到实例化的对象不是null。

我可以只使用实例化的对象而不是常量,但建议不要使用。

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 个答案:

答案 0 :(得分:1)

是的,就像评论所建议的那样,它是异步的。好消息是,您尝试同步访问它的位置与您访问原始对象的位置相同,因此您可以直接使用它:

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;