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

使用React-Redux与Redux Toolkit实现模态框报错:Cannot read properties of undefined

解决React-Redux中"Cannot read properties of undefined (reading 'editQuoteModalShown')"错误

错误原因

你在store.jsx中错误地将整个editQuoteModalSlice对象作为reducer传入了store配置,而Redux的reducer字段需要的是reducer函数(即slice对象的reducer属性)。这导致Redux store中没有正确初始化editQuoteModalSlice这个状态节点,所以当selector尝试访问state.editQuoteModalSlice.editQuoteModalShown时,state.editQuoteModalSlice是undefined,进而触发报错。

修复方案

有两种可行的修复方式:

方式1:导入slice的默认导出(reducer函数)

修改store.jsx的导入语句,导入slice默认导出的reducer,并在store配置中使用它:

// store.jsx
import { apiSlice } from "./api/apiSlice";
// 导入默认导出的reducer
import editQuoteModalReducer from "../features/quotes/editQuoteModalSlice";

export const store = configureStore({
  reducer: {
    [apiSlice.reducerPath]: apiSlice.reducer,
    // 使用导入的reducer函数,键名保持和selector一致
    editQuoteModalSlice: editQuoteModalReducer,
  },
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware().concat(apiSlice.middleware),
  devTools: true,
});

setupListeners(store.dispatch);

方式2:使用slice对象的reducer属性

如果保持导入命名的slice对象,在store配置中明确指定使用它的reducer属性:

// store.jsx
import { apiSlice } from "./api/apiSlice";
import { editQuoteModalSlice } from "../features/quotes/editQuoteModalSlice";

export const store = configureStore({
  reducer: {
    [apiSlice.reducerPath]: apiSlice.reducer,
    // 访问slice对象的reducer属性
    editQuoteModalSlice: editQuoteModalSlice.reducer,
  },
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware().concat(apiSlice.middleware),
  devTools: true,
});

setupListeners(store.dispatch);

验证

修复后,Redux store会正确初始化editQuoteModalSlice状态节点,editQuoteModalShownSelector就能正常访问到editQuoteModalShown属性,组件也能正确根据状态渲染模态框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:37:18