javascript - Redux 状态不会在 firebase auth onAuthStateChanged 回调中更新
问题描述
我在这样的firebase auth onAuthStateChanged回调中使用redux状态
...
const authUser = useSelector(state => state.authUser)
console.log(authUser.status)
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, () => {
console.log(authUser.status)
if (authUser.status === 'loading') {
dispatch(updateStatus('loaded'))
}
return () => unsubscribe()
}, []);
...
首先它记录了
加载
加载
然后在我登录后,身份验证状态发生了变化并记录了
加载
加载
status 的初始状态是loading
。每次身份验证状态发生变化时,它都会调用回调函数。回调中 status 的值总是loading
即使它在 store 中的值已更改为loaded
。为什么它在回调中的值没有改变?
解决方案
在阅读了 Dan 的解释后,我知道状态,props 永远不会在闭包内改变。实现我想要的逻辑,只需要重写createSlice里面的更新逻辑
...
updateStatus: (state, action) => {
if (state.auth.status === 'loading') {
state.auth.status = 'loaded'
}
}
...
推荐阅读
- huawei-mobile-services - 尝试服务器端验证华为订阅时出现“令牌已过期或无效”
- linux - 如何删除打开 Linux 终端时默认运行的脚本?(WSL)
- python - 绘制 LED 光谱的峰值偏移
- reactjs - 如何在反应中导入npm包?
- laravel - 为什么 docker 容器不在 Windows 中运行?
- c# - 摧毁后重生 AI
- google-apps-script - 带有 BigQuery 的 Google Workspace 插件,用于记录使用情况
- python - 使用python在excel中创建一个下拉列表
- html - 移动视图的下拉无序列表
- ios - 将 Swift 框架嵌入到另一个框架 Xcode