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

Redux中user变量控制台显示不为空却被判定为null,始终渲染Login组件

问题根因

你的Redux状态层级和取值判断不匹配:
userSlice的内部状态结构是{ user: 真实用户信息 },注册到全局Store后,完整的全局状态层级为:

{
  // 根状态下的user对应整个userSlice的状态对象
  user: {
    // slice内部的user字段才是你存储的用户数据,登录后这个字段才会不为null
    user: null | { email: string, uid: string, displayName: string ... }
  }
}

你当前定义的selectUser选择器返回的是根状态下的user(也就是整个slice的状态对象),这个外层对象永远不会为null,你用!user判断是否登录的逻辑和实际取值完全错位,才会出现状态显示登录但页面始终渲染登录页的问题。

修复方案

任选以下一种即可,效果完全一致:

方案1:修改选择器,直接返回真实用户数据

修改userSlice.js中的selectUser定义:

// 原代码
// export const selectUser = (state) => state.user;
// 修改后
export const selectUser = (state) => state.user.user;

方案2:修改App.js的判断条件,补全状态层级

修改App.js中的登录判断逻辑:

// 原代码
// {!user ? <Login></Login> : (
// 修改后
{!user.user ? <Login></Login> : (

修复后可以在App.js中打印user变量确认取值,就可以正常根据登录状态渲染对应页面了。


内容的提问来源于stack exchange,提问作者Guillaume Ayad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:09:04