如何使用 useEffect 正确地获取和保存数组中的数据

How correctly fetch and save data inside an array using useEffect

我正在使用 React 并使用 useEffect 从区块链异步获取数据。 我不明白的是,虽然 map 函数中的 console.log 有效并且它打印了正确的数据,但据推测它应该将该数据保存在数据数组中,但是当我在地图外记录数据时(意味着它应该已经完成保存数据)我得到一个未定义值的数组。 代码:

  useEffect(() => {
    const data = mainnet.Vaults.map((pool) => {
      const loadLendingData = async () => {
        const dataPool = await getPoolInfo(pool);
        console.log('dataPool', dataPool) //all good it prints everything
        return dataPool
      };
      loadLendingData();
     })
     console.log('data', data) //[undefined, undefined, undefined and so on]  
     setData(data)
  }, []);

为什么会这样?我做错了什么?

编辑: 我通过为地图中的每个循环使用 useState 存储数据来解决这个问题。 代码:

  useEffect(() => {
    mainnet.Vaults.map((pool) => {
      const loadLendingData = async () => {
        const dataPool = await getPoolInfo(pool);
        setLendingData((prevPool) => [...prevPool, dataPool])
      };
      loadLendingData();
     })
  }, []);

但我仍然想了解为什么第一个示例不起作用。

我看到你没有从 map 函数返回任何东西,这就是数组在 map 函数之外有未定义元素的原因。

return loadLendingData()

这应该可以解决您的问题。