【发布时间】:2021-04-21 02:20:50
【问题描述】:
首先,我使用 Firebase 来构建我的数据库。
我像这样通过 useState 保存了我的 db 值。
const getFromFirestore = useCallback(() => {
console.log("GET From Firestore");
webtoonSites.forEach((siteName) => {
days.forEach(async (day) => {
await dbService
.collection(userObj.uid)
.doc(siteName)
.collection(day)
.onSnapshot((snapShot) => {
const webtoonArr = snapShot.docs.map((doc) => doc.data());
setMyWebtoons((prev) => {
return {
...prev,
[siteName]: {
...prev[siteName],
[day]: webtoonArr,
},
};
});
});
});
});
setDataInit(true);
}, [myWebtoons, userObj]);
然后, 我通过 Firebase 更改了 DB 值,因为有一些东西要删除。
if (ok) {
console.log("delete");
await dbService
.collection(userObj.uid)
.doc(siteName)
.collection(targetWebtoonObj.day)
.doc(targetWebtoonObj.title)
.delete();
}
我以为 React 不会识别 DB 值已更改,但它识别了它并进行了自动重新渲染过程。
所以我使用 console.log() 检查了函数“getFromFirestore”的执行情况,该函数从 db 设置状态值,但它甚至没有被执行。
React 钩子何时以及如何识别 db-changed 并更改状态值...?
【问题讨论】:
标签: reactjs firebase google-cloud-firestore react-hooks use-state