// fetch users only when your app renders
useEffect(() => {
db.collection("customers")
.doc(user.info.uid)
.collection("profiles")
.get()
.then((querySnapshot) => {
const documents = querySnapshot.docs.map((doc) => doc.data());
// setUserProfiles(documents); You do not need this
dispatch(profiles(userProfiles))
});
}, []);
现在使用useSelector到达redux中的状态
// assuming reducers name is "users"
const usersState = useSelector((state) => state.users);
现在,当您使用Map Guard应用程序时
// make sure you use the correct data
// you migh need to destructure
{usersState && usersState.map((profile) => {
2条答案
按热度按时间hpcdzsge1#
在当前的实现中,当您的页面被渲染时,
db.collections
会运行,您设置状态setUserProfiles(documents)
来渲染您的应用,然后db.collections
会再次运行。为了防止出现这种情况,您应该在useEffect
中运行db.collections
。另有用途效果
这也不会起作用。
setUserProfiles
将导致问题。因为当应用程序呈现时,你提取数据,你设置状态,更改userProfiles
,这将再次重新呈现应用程序。您的代码的问题是您不需要
setUserProfiles
,而是在db.collections()
中,当您获得文档时,您分派文档,然后使用useSelector
从redux访问配置文件。现在使用
useSelector
到达redux
中的状态现在,当您使用Map Guard应用程序时
jdg4fx2g2#
对于任何遇到这个问题的人来说,你可能会发现这是很有用的。
第一个