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

Redux Toolkit+Redux-Saga+Redux-Persist遇非序列化值错误求助

问题分析与解决

错误根源

你碰到的非序列化值错误,核心原因是**configureStore配置项拼写错误**:你把middleware写成了middleWare(首字母大写的W),导致你设置的serializableCheck完全没有被Redux Toolkit识别,所以之前的忽略动作、关闭检查等操作全都没生效。

同时错误提示里的register字段携带了一个函数,这确实是不可序列化的值,不过只要配置生效就能忽略这类redux-persist相关动作的检查。

修复方案

  1. 修正配置项拼写:将middleWare改为middleware(全小写的w),这是Redux Toolkit要求的正确属性名。
  2. 保留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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:18:33