gpt4 book ai didi

reactjs - 如何使用 React Hooks 和 Context API 将来自 useEffect 内部调用的多个端点的数据正确添加到状态对象?

转载 作者:行者123 更新时间:2023-12-05 06:22:21 24 4
gpt4 key购买 nike

我在 fetchData 函数内调用 firestore,然后将接收到的数据添加到状态对象,但问题是全局状态被我的 中看到的最后一个 api 调用覆盖console.log 输出:

console log output

这是我的代码:

import React, { useState, useEffect } from 'react';

import { db } from './firebase';

export const StateContext = React.createContext();

export function ContextController({ children }) {
const intialState = {
projectList: [],
blogList: [],
count: 0
};

const [state, setState] = useState(intialState);

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

async function fetchData() {
// get all projects
db.collection('projects')
.get()
.then((querySnapshot) => {
const data = querySnapshot.docs.map((doc) => doc.data());
let sorted = [];

// loop through each object and push to sorted array
data.forEach((item) => {
sorted.push(item.body);
});
// reverse sort the projects
sorted.sort(
(a, b) => parseInt(b.project_id) - parseFloat(a.project_id)
);
setState({
...state,
projectList: sorted
});
});

// get all blogs
db.collection('blog')
.get()
.then((querySnapshot) => {
const data = querySnapshot.docs.map((doc) => doc.data());
setState({
...state,
blogList: data
});
});
}

return (
<StateContext.Provider value={[state, setState]}>
{children}
</StateContext.Provider>
);
}

如何将两个端点的数据正确添加到状态对象,以便我可以在我的应用中的任何位置访问它?

最佳答案

我认为问题在于你将旧状态传播到 setState 状态已经过时了。 React 围绕 setState 做了一些性能增强,这将使这样的代码无法按预期工作。

可以尝试的一件事是使用 setState 回调。

setState((state) => ({
...state,
projectList: sorted
}));

关于reactjs - 如何使用 React Hooks 和 Context API 将来自 useEffect 内部调用的多个端点的数据正确添加到状态对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com