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在开发环境同步状态时,可能传入了不符合类型要求的数据。暂时注释掉该中间件,看报错是否消失。若消失,检查
userreducer对同步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
相关产品推荐
相关产品推荐

