2016-06-28 40 views
17

当我为Chrome扩展添加中间件时,减速器在现场停止正常工作(但是chrome/redux调试工具起作用)+在控制台中出现以下错误:Redux:减速器接收到的上一个状态具有意想不到的“功能”类型

减速机接收到的上一个状态具有意外的“功能”类型。预计参数与以下键的对象: “身份验证”, “普通”, “家”

这里是代码:

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

正如错误所述,您需要查看reducer,因此如果您提供了reducer代码将会很有帮助。 –

回答

35

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

11

createStoreaccepts 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

相关问题