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

Redux Store仅在开发环境报输入无效类型错误,求排查原因

Redux开发环境报错input is invalid type排查方案

我的Redux Store代码在开发环境运行时会抛出throw new Error(INPUT_ERROR); Error: input is invalid type错误,但生产环境完全正常,求帮忙排查原因。代码如下:

import { createStore, applyMiddleware, combineReducers } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";
import { persistStore, persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";
import sessionStorage from "redux-persist/lib/storage/session";
import thunk from "redux-thunk";
import rootReducer from "./reducers";
import { createStateSyncMiddleware } from "redux-state-sync";

const SET_CLIENT_STATE = "SET_CLIENT_STATE";
const middlewares = [
thunk,
createStateSyncMiddleware({
    // blacklist: ["extras", "products"]
    whitelist: ["user"],
}),
];

const persistConfig = {
key: "root",
storage,
whitelist: ["user", "loggedInDoctor", "loggedInPatient"],
};

const sessionRedConfig = {
key: "referrer",
storage: sessionStorage,
};

const { referrer, ...otherReducer } = rootReducer;

const allReducers = combineReducers({
...otherReducer,
referrer: persistReducer(sessionRedConfig, referrer),
});

const persistedReducer = persistReducer(persistConfig, allReducers);

const makeConfiguredStore = (reducer, initialState) =>
createStore(
    reducer,
    initialState,
    composeWithDevTools(applyMiddleware(...middlewares))
);

export const makeStore = (initialState, { isServer, req, debug, storeKey }) => {
if (isServer) {
    initialState = initialState || { fromServer: "foo" };
    return makeConfiguredStore(allReducers, initialState);
} else {
    // we need it only on client side
    const store = makeConfiguredStore(persistedReducer, initialState);
    store.__persistor = persistStore(store); // Nasty hack
    return {
    ...store,
    store,
    };
}
};

export const setClientState = (clientState) => ({
type: SET_CLIENT_STATE,
payload: clientState,
});

排查方向

  • Redux DevTools兼容性问题:开发环境启用了composeWithDevTools,生产环境未启用,可能是DevTools与redux-persist/state-sync中间件的交互触发了类型错误。可以暂时移除composeWithDevTools包裹,直接用applyMiddleware(...middlewares)初始化store,看报错是否消失。如果是,尝试给DevTools传空配置composeWithDevTools({}),或关闭trace等功能,避免默认行为冲突。
  • 持久化数据类型不匹配:开发环境浏览器缓存的旧持久化数据(localStorage/sessionStorage)与当前reducer预期的state结构/类型不一致。手动清空浏览器缓存后重启项目,验证是否解决问题。
  • redux-state-sync中间件问题:state-sync在开发环境同步状态时,可能传入了不符合类型要求的数据。暂时注释掉该中间件,看报错是否消失。若消失,检查user reducer对同步action的处理逻辑,确认payload类型是否合规。
  • initialState类型异常:开发环境的initialState可能为undefined或类型错误,触发reducer的类型校验。给客户端初始化的initialState加默认值initialState = initialState || {},避免非法值传入。
  • Reducer内部类型校验:某个reducer(如user、referrer)内部有类型校验逻辑,开发环境下(比如DevTools回放action)触发了非法payload。在reducer中添加console.log打印action和当前state,定位具体出错的reducer和action。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:55:21