【发布时间】:2020-09-06 06:10:13
【问题描述】:
你好!
我正在使用带有 React Context API 的 React。我有整个应用程序的App.js 组件。它是功能组件。其中有上下文的状态(useState):
const [contextValue, setContextValue] = useState(null)
还有useEffect:
useEffect(() => {
const wrapper = async () => {
let data = {};
const fetchData = () => {
fetchAbout().then((res) => (data.about = res.data));
fetchNews().then((res) => (data.news = res.data));
fetchArticles().then((res) => (data.articles = res.data));
fetchOffer().then((res) => (data.offer = res.data));
fetchPortfolio().then((res) => (data.portfolio = res.data));
fetchQuestions().then((res) => (data.questions = res.data));
};
await fetchData();
console.log(data);
console.log(data.about);
setContextValue(data);
};
wrapper();
}, []);
所以在fetchData 函数中,我正在创建data 对象的属性。
所以await fetchData()之后,有2个控制台日志。正如预期的那样,首先是使用其字段记录数据对象:
但是console.log(data.about); 有问题,因为它正在记录undefined!。
我预计,它将是数据对象中 about 字段的值(如第一个 console.log)
提前致谢
【问题讨论】:
-
尝试改变 fetchAbout().then((res) => (data.about = res.data.about));
-
您的
fetchData返回undefined。您无需等待内部的任何 Promise 解决。使用Promise.all等待每个Promise 先解决,然后调用setContextValue。Promise.all([fetchAbout(), fetchNews()]).then((res) => setContextValue({ about: res[0].data, news: res[1].data ...
标签: javascript reactjs react-hooks javascript-objects react-context