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

React Redux Toolkit登录状态更新后仍为空问题求助

问题修复方案

核心错误:extraReducers 参数名拼写错误

你的userSlice.js中extraReducers的回调参数写成了builders,但RTK的createSlice要求这里的参数是单个builder实例,复数命名导致addMatcher没有被正确注册,状态更新逻辑根本没执行。

修改userSlice.js中的extraReducers部分:

extraReducers: (builder) => { // 把builders改成builder
  builder.addMatcher(authApi.endpoints.loginUser.matchFulfilled, (state, action) => {
    state.userData = action.payload.success.data
    state.accessToken = action.payload.success.accessToken
    state.role = action.payload.success.roles
  })
}

次要错误:logout reducer 操作不存在的状态字段

你的initialState里没有currentUser和errorMessage字段,logout reducer里修改这两个字段是无效的,应该对应清空初始化时定义的字段:

reducers: {
  logout: (state) => {
    state.role = null;
    state.accessToken = null;
    state.userData = null;
  }
},

验证步骤

  1. 重新运行项目,发起登录请求
  2. 打开Redux DevTools,确认user状态是否正确更新
  3. 通过selectUser selector获取accessToken,验证是否能拿到有效值

额外建议(可选)

RTK Query本身会缓存mutation的响应数据,你也可以直接通过useLoginUserMutation的返回值获取数据,不需要手动同步到slice:

const [login, { data, isSuccess }] = useLoginUserMutation();

// 登录成功后直接使用返回的data
if (isSuccess) {
  console.log(data.success.accessToken);
}

内容的提问来源于stack exchange,提问作者RANTO BERK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:00:51