在商店中应用中间件在Redux中没有正确地称为reducer

时间:2016-04-25 13:19:01

标签: javascript reactjs redux react-redux

我正在使用React + Redux制作网站。在我添加中间件之前,应用程序工作正常,但添加后,reducer无法正确调度。

这是我的代码:

import { createStore, applyMiddleware } from 'redux';

...

let createStoreWithMiddleware = applyMiddleware(logger)(createStore);

let store = createStoreWithMiddleware(appReducer);

store.dispatch(updateText('text changed.'));

这是我上面刚刚使用的动作创建者:

const UPDATE_TEXT = 'UPDATE_TEXT';

function updateText(text = '') {
    return {
        type: UPDATE_TEXT,
        text
    };
}

这是appReducer:

const defaultState = { text: 'default' };
function appReducer(state = defaultState, action) {
    switch(action.type) {
        case UPDATE_TEXT:
            return Object.assign({}, state, {
                text: action.text
            });
        default:
            return state;
    }
}

如果我只是删除applyMiddleware并使用createStore直接创建商店,如下所示:

let store = createStore(appReducer);

它工作正常!但我真的想使用中间件。我该怎么办?任何给我一个手的人都会非常感激!

1 个答案:

答案 0 :(得分:1)

redux-logger的旧版本中(您可能正在使用),初始导入是需要首先调用的函数,如下所示:

import createLogger from 'redux-logger'
const logger = createLogger()

然后您可以使用logger作为中间件:

...
const createStoreWithMiddleware = applyMiddleware(logger)(createStore)
...

但是,在当前版本中,您只需import logger from 'redux-logger'并以这种方式使用它。如果您想使用自定义选项创建记录器,可以import { createLogger } from 'redux-logger'