reactjs - Firebase AuthStateChange 中的 setState 时无限循环
问题描述
我想将 Firebase 集合存储为状态,以便可以映射它并显示每个用户。我正在使用 onAuthStateChange,因此刷新页面时不会出现 uid undefine 错误。知道为什么在 onAuthStateChanged 中设置状态会导致无限循环吗?onAuthStateChange 不应该监听 React 状态的变化,而是用户状态的变化,例如登录或注销,对吗?
// userHome.js - infinite loop
export default function(){
const [userCollection, setUserCollection] = useState();
firebase.auth().onAuthStateChanged(isUser => {
if (isUser) {
const db = firebase.firestore();
const userRef = db.collection("user").doc(currentUser.uid);
setUserCollection(userRef);
}
});
}
// Auth.js
export const AuthContext = React.createContext();
export const AuthProvider = ({ children }) => {
const [currentUser, setCurrentUser] = useState(null);
useEffect(() => {
// Runs everytime auth state changes
app.auth().onAuthStateChanged(user => {
setCurrentUser(user);
user.getIdTokenResult().then(IdTokenResult => {
user.adminRole = IdTokenResult.claims.adminRole;
user.shopRole = IdTokenResult.claims.shopRole;
user.userRole = IdTokenResult.claims.userRole;
});
console.log("user state changed");
});
}, []);
return (
<AuthContext.Provider
value={{
currentUser
}}
>
{children}
</AuthContext.Provider>
);
};
解决方案
推荐阅读
- linux - How to echo base64 within CURL?
- php - WooCommerce:付款后发送电子邮件不起作用
- firebase - Firebase Cloud Functions 发布到 Telegram API
- javascript - 在同一屏幕上传递道具 onPress
- python - 实时组合 JSON 对象
- javascript - 仅允许从 Google 地图 API 自动完成(城市)中选择的值
- c# - Xamarin android with mvvm light:Textview 绑定仅在调用 relaycommand 时更新
- python - 尝试读取/写入树莓派上的文件时出现权限错误
- neural-network - 为什么线性函数在多层神经网络中没有用?最后一层如何成为第一层输入的线性函数?
- javascript - 从对象数组中获取特定属性?