You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux Toolkit集成后currentUser登出时未重置为null问题

问题:Redux Toolkit集成后登出状态无法重置为null

问题描述

Header组件根据currentUser是否为null切换登录/登出按钮,使用本地状态时功能正常,但集成Redux Toolkit后,登出时currentUser无法重置为null,导致按钮切换逻辑失效。

问题原因

在App.js的onAuthStateChanged回调中,当用户登出(userAuth为null)时,错误地将userAuth包装成对象传入setCurrentUser:

else
  setCurrentUser({userAuth})

这会让Redux中的currentUser变成{userAuth: null}这个对象(而非null值),而对象属于真值,所以Header里的currentUser ? ... : ...判断永远为true,无法触发登录按钮的显示。

解决方案

修改App.js中onAuthStateChanged的else分支,直接传入userAuth(即null),而非包装成对象:

修改后的App.js相关代码:

this.unsubscribeFromAuth=auth.onAuthStateChanged( async userAuth=>{
  if (userAuth){
    const userRef= await createdUserProfileDocument(userAuth);
    userRef.onSnapshot(snapShot=>{
      setCurrentUser({
        id:snapShot.id,
        ...snapShot.data()
      })
    })
  } else {
    // 直接传入userAuth(此时为null),而非包装成对象
    setCurrentUser(userAuth)
  }
})

验证逻辑

当用户执行登出操作时,Firebase的onAuthStateChanged会触发userAuth为null,此时调用setCurrentUser(null),Redux中的currentUser会被正确重置为null。Header组件的判断currentUser ? ... : ...会识别到null值,自动切换回登录按钮,恢复正常功能。

内容的提问来源于stack exchange,提问作者kidus feleke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:50:36