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; } },
验证步骤
- 重新运行项目,发起登录请求
- 打开Redux DevTools,确认
user状态是否正确更新 - 通过
selectUserselector获取accessToken,验证是否能拿到有效值
额外建议(可选)
RTK Query本身会缓存mutation的响应数据,你也可以直接通过useLoginUserMutation的返回值获取数据,不需要手动同步到slice:
const [login, { data, isSuccess }] = useLoginUserMutation(); // 登录成功后直接使用返回的data if (isSuccess) { console.log(data.success.accessToken); }
内容的提问来源于stack exchange,提问作者RANTO BERK
相关产品推荐
相关产品推荐

