【发布时间】:2020-12-03 07:29:51
【问题描述】:
好的,我是使用 react useEffect 钩子的新手,我很困惑为什么我会遇到这个问题。我使用此代码从 Firebase API 获取并将其放入名为 tempDoc 的数组中:
const tempDoc = []
useEffect(() => {
var docRef = db.collection("campaigns");
docRef.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
tempDoc.push({
id: doc.id,
...doc.data()
})
setCampaigns(tempDoc)
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}, []);
在控制台中,它返回我想要的对象数组。我将数组映射到显示卡。例如,假设我的数组有 3 个对象。有时当组件渲染时,只显示 1 张卡片,但我可以在控制台中看到,所有 3 个对象都在我的数组中。有时所有 3 个都渲染,但是当我转到新页面并返回主屏幕时,只显示 1 张卡片。很困惑。
组件的呈现方式肯定发生了一些变化。我是 useEffect 的新手,所以我不确定。
【问题讨论】:
-
useEffect钩子在组件渲染后 运行,事实上,它与渲染组件没有太大关系。您能否更新您的问题以包含Minimal, Complete, and Reproducible 组件代码示例?其他事情可能会影响渲染的内容。您在哪里控制台记录数据? -
添加您尝试用来渲染卡片的代码。
-
您似乎在
querySnapshot.forEach循环中运行setCampaigns(tempDoc)。在该循环之后,您应该只运行一次。
标签: reactjs frontend use-effect