【发布时间】:2021-04-29 19:27:46
【问题描述】:
useEffect(() => {
const onChildAdd = database().ref('/User/' + user.uid ).on('value', snapshot => {
setComplete(snapshot.val().Complete);
setUserProfile(snapshot.val().User);
setStartYear(snapshot.val().StartYear);
setDisplayName(snapshot.val().displayName);
setDisplayPicture(snapshot.val().photoURL);
// ...
});
return () =>
database().ref('/User/' + user.uid )
.off('value', onChildAdd);
}, [user.uid])
这就是他们每个人的使用方式
<Text>My name is {displayName}</Text>
错误 警告:已超过最大更新深度。当组件在 useEffect 中调用 setState 时,可能会发生这种情况,但 useEffect 要么没有依赖数组,要么每次渲染时依赖项之一发生变化。
【问题讨论】:
-
setUserProfile(snapshot.val().User);是否更新user?你只有一个依赖user.id我假设它是一个字符串。似乎每次调用数据库你都会得到一个不同的user.uid,这就是你得到那个错误的原因 -
正如@buzatto 指出的那样,您已经导致了一个无限循环,每次添加
useEffect处理程序时,都会更新用户配置文件,这会重置您的useEffect处理程序并再次更新配置文件.您应该将[user.uid]换成[activeUserId]或[currentUserId],并确保不要在useEffect处理程序中设置它。然后当你想同步另一个用户的数据时,只需更改activeUserId/currentUserId,它就会正确获取新数据。 -
那么意思是
user和User是同一个东西? -
user.uid来自被调用到该文档的认证文档,而User只是从文档中读取 -
当我删除
SetUserProfile(snapshot.val().User时,错误仍然存在
标签: javascript reactjs firebase react-native firebase-realtime-database