繁体   English   中英

如何在useEffect中处理获取的数据

[英]How to process fetched data in useEffect

当我尝试处理来自 api 的数据时,然后使用它来渲染,但我总是 go 出现异步问题,因为进程 function 没有等待我的提取功能。

const [fetchData1, setData1] = useState([]);
const [fetchData1, setData2] = useState([]);
const [processedData, setProcessedData] = useState([]);

useEffect(() => {
 const getData1 = async () => {
  //get data1 using axios
  //setData1(response)
 }
 const getData2 = async () => {
  //get data2 using axios
  //setData2(response)
 }
 getData1();
 getData2();
 setProcessedData(processData(fetchData1, fetchData2));
}, [])

const processData = (data1, data2) => {
 //process two data
 //return data;
}

即使我尝试将两个获取函数和进程 function 包装在异步 function 中,但问题仍然存在。

(async () => {
  await getData1();
  await getData2();
  setProcessedData(processData(fetchData1, fetchData2));
})

阅读您的问题,据我所知,您不需要fetchData1fetchData2 ,您只需要processedData 您当前代码的问题在于它在调用setProcessedData时使用了fetchData1fetchData2的默认值,它没有使用 axios 的结果。

等待两个 promise 解决并使用它们的结果。 看评论:

const [processedData, setProcessedData] = useState([]);

useEffect(() => {
    const getData1 = async () => {
        //get data1 using axios
        //setData1(response)
    };
    const getData2 = async () => {
        //get data2 using axios
        //setData2(response)
    };
    // *** Wait for both promises to be fulfilled
    Promise.all(
        getData1(),
        getData2()
    ).then([data1, data2]) => { // Get those results into parameters
        // *** Use the parameter values
        setProcessedData(processData(data1, data2));
    }).catch(error => {
        // handle/report error
    });
}, []);

// *** render using the current values in `processedData`

请注意,由于您在首次创建组件时执行此操作,因此当组件中的其他 state 发生更改时(如果它具有其他状态),您无需担心取消它等。 如果调用依赖于您在依赖项数组中列出的其他 state 数据,则如果在调用 axios 期间其他数据发生更改,您可能需要处理忽略早期结果。 但同样,不是你在这里所做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM