2016-08-19 52 views
4

在我的configureStore.dev.js文件中使用此代码时,在添加applyMiddleware(reduxImmutableStateInvariant)时,我得到一个Uncaught TypeError: getState is not a function。当我删除这个添加的中间件时,我的项目运行良好。什么是添加这个中间件的正确方法?以下是完整的文件:TypeError:将中间件添加到Redux时,getState不是函数

import {createStore, compose, applyMiddleware} from 'redux'; 
import rootReducer from '../reducers'; 
import reduxImmutableStateInvariant from 'redux-immutable-state-invariant'; 

export default function configureStore(initialState) { 
    const store = createStore(rootReducer, initialState, compose(
    // Add other middleware on this line... 
    applyMiddleware(reduxImmutableStateInvariant), 
    window.devToolsExtension ? window.devToolsExtension() : f => f // add support for Redux dev tools 
    ) 
); 

    if (module.hot) { 
    // Enable Webpack hot module replacement for reducers 
    module.hot.accept('../reducers',() => { 
     const nextReducer = require('../reducers').default; // eslint-disable-line global-require 
     store.replaceReducer(nextReducer); 
    }); 
    } 

    return store; 
} 

回答

10

reduxImmutableStateInvariant是,你需要传递到applyMiddleware之前调用的函数。

const store = createStore(rootReducer, initialState, compose(
     // Add other middleware on this line... 
     applyMiddleware(reduxImmutableStateInvariant()), 
     window.devToolsExtension ? window.devToolsExtension() : f => f // add support for Redux dev tools 
    ) 
); 

这哪里是在文档?

在github中README docs,被调用后被导入(通过require)reduxImmutableStateInvariant。见第三行,如下:

// Be sure to ONLY add this middleware in development! 
const middleware = process.env.NODE_ENV !== 'production' ? 
    [require('redux-immutable-state-invariant')(), thunk] : 
    [thunk]; 

// Note passing middleware as the last argument to createStore requires [email protected]>=3.1.0 
const store = createStore(
    reducer, 
    applyMiddleware(...middleware) 
); 

为什么不咚的功能有关系吗?

在thunk中间件中,thunk功能是called before it is returned

const thunk = createThunkMiddleware(); 
thunk.withExtraArgument = createThunkMiddleware; 

export default thunk; 

那么,为什么是终极版,不变的状态不变的功能?

根据代码,它看起来像你可以传入一个函数(isImmutable),用于确定你的redux状态中哪些属性是不可变的。我认为提供你自己的isImmutable功能可以让这个中间件很好地与其他不可变的库一起工作。

export default function immutableStateInvariantMiddleware(isImmutable = isImmutableDefault) { 

这种方法用在这里 https://github.com/leoasis/redux-immutable-state-invariant/blob/5ed542246e32b7eec06879b25e5a0a478daf4892/src/trackForMutations.js#L5

相关问题