首页 > 解决方案 > 使用 axios 获取数据后 React useEffect 返回空数组

问题描述

我试图从我创建的 api 中获取我的数据,但它总是返回一个空数组。

这是我的代码

const [orders, setOrders] = useState([]);

  const getOrders = async () => {
    try {
      const access_token = localStorage.getItem("access_token");
      let result = await axios({
        method: "GET",
        url: "http://localhost:3000/orders/open",
        headers: {
          access_token,
        },
      });
      setOrders(result.data);

      console.log(result.data);
      console.log(orders);
    } catch (err) {
      console.log(err);
    }
  };

  useEffect(() => {
    getOrders();
  }, []);

这是我浏览器的控制台结果 在此处输入图像描述

如您所见,result.data 在其中成功返回了 2 个对象,但是在我使用 setOrders(result.data) 将其添加到订单状态后,订单仍然为空。

我还在 Postman 上测试过 API,完全没有问题。 在此处输入图像描述

我一直在以这种方式使用 axios 获取数据,这是我第一次遇到这个问题。

标签: reactjsaxiosreact-hooksuse-effectreact-fullstack

解决方案


这是因为 Reactjs 的批处理状态更新机制

您的状态更新是异步的,因此在函数/事件完成之前不会更新。

在你的函数console.log(orders)之前检查。return()


推荐阅读