如何在javascript中读取对象的属性?
你好强> 我正在使用React和React上下文API。我有整个应用的如何在javascript中读取对象的属性?,javascript,reactjs,react-hooks,javascript-objects,react-context,Javascript,Reactjs,React Hooks,Javascript Objects,React Context,你好 我正在使用React和React上下文API。我有整个应用的App.js组件。它是一个功能组件。在它的上下文中有状态(useState): const [contextValue, setContextValue] = useState(null) 和useffect: useEffect(() => { const wrapper = async () => { let data = {}; const fetchData = () =&g
App.js
组件。它是一个功能组件。在它的上下文中有状态(useState
):
const [contextValue, setContextValue] = useState(null)
和useffect
:
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
对象的属性。
因此,在等待fetchData()之后,有两个控制台日志。正如所料,首先是记录数据对象及其字段:
但是,
console.log(data.about)有问题代码>,因为它正在记录未定义!。
我希望它是数据对象中about字段的值(就像在firstconsole.log中一样)
提前感谢fetchData没有返回承诺,因此您不能“等待”。
当您console.log(data.about)
时,数据尚未填充。
你可以通过
const fetchData = () => {
return Promise.all([
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)),
])
};
尝试更改fetchAbout()。然后((res)=>(data.about=res.data.about));您的fetchData
返回undefined
。你不是在等待里面的任何承诺来解决。使用Promise.all
先等待每个承诺得到解决,然后调用setContextValue
Promise.all([fetchAbout(),fetchNews()])。然后((res)=>setContextValue({about:res[0]。数据,新闻:res[1]。数据…
非常感谢,它解决了我的问题。你能解释一下,Promise.all()
是如何工作的吗?Promise.all获得一个承诺数组,并返回一个承诺,在所有承诺都得到解决后解析(如果一个或多个失败,它将拒绝)