【发布时间】:2021-12-10 01:58:02
【问题描述】:
我希望 useEffect 获取和呈现 rooms 数据。并在将新房间添加到rooms时重新渲染数据
获取数据并使用 useEffect 和空依赖项显示数据的代码。
const [rooms, setRooms] = useState([]);
const getRoomsData = async () => {
const querySnapshot = await getDocs(collection(db, "rooms"));
const data = querySnapshot.docs.map((doc) => ({
id: doc.id,
data: doc.data(),
}));
setRooms(data);
};
useEffect(() => {
getRoomsData();
console.log("rerendered");
}, []);
使用此代码,在我向rooms 添加新房间后。我需要手动刷新页面以查看呈现的新数据。将新的“房间”添加到rooms 后,我应该怎么做才能使其重新呈现?
添加房间的代码:
const roomName = prompt("please enter name for chat room");
if (roomName) {
addDoc(collection(db, "rooms"), {
name: roomName,
});
}
};
我尝试将房间添加到 useEffect 依赖项,它具有我想要的结果(无需刷新),但这只是因为它无限渲染,这很糟糕。正确的做法是什么?
【问题讨论】:
-
您如何知道
data何时更改以将状态更新加入队列?你在使用火力基地吗?难道没有onSnapshot方法可以用于集合吗? -
是的,我正在使用 firebase。所以基本上我希望我的应用程序在我将文档添加到我的 firebase 集合“房间”后重新呈现。我希望我的应用程序获取数据并重新呈现它,因此我不必刷新页面即可查看更新的数据。我该怎么做?
-
我明白了,所以您知道数据何时发生更改,因为您刚刚添加了它。如果您在“添加房间”代码的末尾调用
getRoomsData以重新获取数据会发生什么?
标签: javascript reactjs use-effect use-state