Redux Toolkit+Redux-Saga+Redux-Persist遇非序列化值错误求助
问题分析与解决
错误根源
你碰到的非序列化值错误,核心原因是**configureStore配置项拼写错误**:你把middleware写成了middleWare(首字母大写的W),导致你设置的serializableCheck完全没有被Redux Toolkit识别,所以之前的忽略动作、关闭检查等操作全都没生效。
同时错误提示里的register字段携带了一个函数,这确实是不可序列化的值,不过只要配置生效就能忽略这类redux-persist相关动作的检查。
修复方案
- 修正配置项拼写:将
middleWare改为middleware(全小写的w),这是Redux Toolkit要求的正确属性名。 - 保留redux-persist内置动作的忽略配置,确保这类内部动作不会触发序列化检查。
修正后的完整store代码:
import { configureStore } from "@reduxjs/toolkit"; import createSagaMiddleware from "redux-saga"; import storage from "redux-persist/lib/storage"; import rootReducer from "./rootReducers"; import { persistReducer, persistStore, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, } from "redux-persist"; const sagaMiddleware = createSagaMiddleware(); const persistConfig = { key: "root", storage, }; const persistedReducer = persistReducer(persistConfig, rootReducer); const store = configureStore({ reducer: persistedReducer, devTools: process.env.NODE_ENV !== "production", // 修正拼写:middleWare → middleware middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: { ignoredActions: [ FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, ], }, }).concat(sagaMiddleware), }); export const persistor = persistStore(store); export default store;
额外排查点
如果修正后仍报错,需要确认:
- 是否有自定义动作在
register字段携带了函数,这类动作也需要添加到ignoredActions列表中 - 检查reducer是否不小心把函数存入了state,Redux要求state必须是可序列化的
内容的提问来源于stack exchange,提问作者Deffo
相关产品推荐
相关产品推荐

