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

Redux项目启动后浏览器无显示,控制台报Uncaught TypeError错误求助

问题解决:Redux Toolkit 中 Uncaught TypeError: Cannot destructure property 'update' of 'userSlice.action' as it is undefined

核心错误及修复步骤:

  1. 动作属性名拼写错误
    createSlice生成的切片对象中,动作生成器集合的属性名是**actions(复数)**,你写成了单数action,导致解构update和remove时找不到对应属性,这是触发报错的直接原因。

修改createSlice.js中的导出代码:

// 原错误代码
// export const { update, remove } = userSlice.action;
// 修改后
export const { update, remove } = userSlice.actions;
  1. Reducer导入名称错误
    store.js中你导入了名为useReducer的变量,这和React内置的useReducer钩子重名,且实际导入的是用户切片的reducer,建议修改导入名称避免混淆:
// 原错误代码
// import useReducer from "./createSlice";
// 修改后
import userReducer from "./createSlice";

export default configureStore({
  reducer: {
    user: userReducer,
  },
});
  1. Remove动作逻辑问题
    你在remove reducer中直接赋值state = {},这在Redux Toolkit的Immer包装下不会生效——Immer通过追踪state属性的修改来生成新状态,直接替换state引用无法被捕获。可以改成清空属性或返回新对象:
remove: (state) => {
  // 方式1:清空现有属性
  state.name = "";
  state.email = "";
  // 方式2:返回全新的初始状态(如果需要完全重置)
  // return { name: "", email: "" };
},

修改后的完整代码

createSlice.js

import { createSlice } from "@reduxjs/toolkit";

export const userSlice = createSlice({
  name: "user",
  initialState: {
    name: "nando",
    email: "nando@gmail.com",
  },
  reducers: {
    update: (state, action) => {
      state.name = action.payload.name;
      state.email = action.payload.email;
    },
    remove: (state) => {
      state.name = "";
      state.email = "";
    },
  }
});

export const { update, remove } = userSlice.actions;
export default userSlice.reducer;

store.js

import { configureStore } from "@reduxjs/toolkit";
import userReducer from "./createSlice";

export default configureStore({
  reducer: {
    user: userReducer,
  },
});

内容的提问来源于stack exchange,提问作者Nando Rifki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:15:27