当我为chrome扩展添加中间件时,reducers在站点上停止正常工作(但chrome / redux调试工具正常工作)+我在控制台中出现以下错误:
reducer收到的先前状态具有意外类型的"功能"。预期参数为具有以下键的对象:" auth"," common"," home"
这是代码:
import { applyMiddleware, createStore } from 'redux';
import { promiseMiddleware, localStorageMiddleware } from './middleware';
import reducer from './reducer';
const middleware = applyMiddleware(promiseMiddleware, localStorageMiddleware);
const store = createStore(reducer, middleware,
window.devToolsExtension ? window.devToolsExtension() : f => f);
export default store;
如果我删除镀铬部分:
,window.devToolsExtension ? window.devToolsExtension() : f => f
如果再次正常工作。
答案 0 :(得分:50)
createStore
最多需要3个参数。如果第二个参数是函数,则假定您的第二个参数是存储增强器。如果它是一个对象或存在3个参数,则假定该参数是您的初始状态。请参阅here。
您的中间件变量是商店增强器,Chrome扩展程序也是增强器:
window.devToolsExtension ? window.devToolsExtension() : f => f
你必须在一个函数中组合两者:
import { applyMiddleware, createStore, compose } from 'redux';
import { promiseMiddleware, localStorageMiddleware } from './middleware';
import reducer from './reducer';
const middleware = applyMiddleware(promiseMiddleware, localStorageMiddleware);
const store = createStore(
reducer,
compose(middleware, window.devToolsExtension ? window.devToolsExtension() : f => f)
);
export default store;
可以找到here的文档。
答案 1 :(得分:16)
createStore
accepts the following arguments:
如果只提供了两个参数,而第二个参数是一个函数,那么它被认为是一个增强器。请参阅source code。
中的详情如果你想使用Redux devtools,那么你应该compose
作为额外的增强器。
import { applyMiddleware, createStore, compose } from 'redux';
const store = createStore(
reducer,
compose(
middleware,
window.devToolsExtension ? window.devToolsExtension() : f => f
)
)
希望有所帮助。 Pozdrav