首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在useEffect中处理获取的数据

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

Stack Overflow用户
提问于 2020-08-07 08:49:07
回答 2查看 194关注 0票数 1

当我试图处理来自api的数据时,然后使用它来呈现,但是我总是会遇到异步的问题,因为process函数不会等待我的获取函数。

代码语言:javascript
复制
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;
}

即使当我试图将两个获取函数和进程函数封装在一个异步函数中时,问题仍然是一样的。

代码语言:javascript
复制
(async () => {
  await getData1();
  await getData2();
  setProcessedData(processData(fetchData1, fetchData2));
})
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-07 08:59:14

读到你的问题,据我所知,你不需要fetchData1fetchData2,你只想要processedData。当前代码的问题是,它在调用fetchData1fetchData2时使用setProcessedData的默认值,而不是使用axios的结果。

等待双方的承诺达成一致,并使用他们的结果。见评论:

代码语言:javascript
复制
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`

注意,由于您是,所以只有在组件第一次创建时才这样做,所以当组件中的其他状态发生变化时(如果它有其他状态),您不需要担心取消它等等。如果调用依赖关系数组中列出的其他状态数据,则如果其他数据在调用axios期间发生了更改,则可能需要处理更早的结果。但再说一次,你在这里所做的不是这样的。

票数 1
EN

Stack Overflow用户

发布于 2020-08-07 08:51:59

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63298410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档