TypeError: getState is not a function when adding middleware to Redux
TypeError: getState is not a function when adding middleware to Redux
在我的 configureStore.dev.js 文件中使用此代码,在添加 applyMiddleware(reduxImmutableStateInvariant)
时我得到一个 Uncaught TypeError: getState is not a function
。当我删除这个添加的中间件时,我的项目运行正常。添加此中间件的正确方法是什么?这是完整的文件:
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;
}
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 redux@>=3.1.0
const store = createStore(
reducer,
applyMiddleware(...middleware)
);
为什么 thunk 不是函数?
在thunk中间件中,thunk函数是called before it is returned.
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;
那么为什么 redux-immutable-state-invariant 是一个函数?
根据代码,您似乎可以传入一个函数 (isImmutable
),该函数用于确定 redux 状态中的哪些属性是不可变的。我认为提供您自己的 isImmutable 函数可以让这个中间件与其他不可变库很好地协同工作。
export default function immutableStateInvariantMiddleware(isImmutable = isImmutableDefault) {
在我的 configureStore.dev.js 文件中使用此代码,在添加 applyMiddleware(reduxImmutableStateInvariant)
时我得到一个 Uncaught TypeError: getState is not a function
。当我删除这个添加的中间件时,我的项目运行正常。添加此中间件的正确方法是什么?这是完整的文件:
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;
}
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 redux@>=3.1.0
const store = createStore(
reducer,
applyMiddleware(...middleware)
);
为什么 thunk 不是函数?
在thunk中间件中,thunk函数是called before it is returned.
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;
那么为什么 redux-immutable-state-invariant 是一个函数?
根据代码,您似乎可以传入一个函数 (isImmutable
),该函数用于确定 redux 状态中的哪些属性是不可变的。我认为提供您自己的 isImmutable 函数可以让这个中间件与其他不可变库很好地协同工作。
export default function immutableStateInvariantMiddleware(isImmutable = isImmutableDefault) {