首页 > 解决方案 > 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。为什么它在回调中的值没有改变?

标签: javascriptfirebasereduxfirebase-authentication

解决方案


在阅读了 Dan 的解释后,我知道状态,props 永远不会在闭包内改变。实现我想要的逻辑,只需要重写createSlice里面的更新逻辑

...
    updateStatus: (state, action) => {
      if (state.auth.status === 'loading') {
        state.auth.status = 'loaded'
      }
    }
...

推荐阅读