首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >function +Redux-路由器=未登录错误:预期还原器是一个函数

function +Redux-路由器=未登录错误:预期还原器是一个函数
EN

Stack Overflow用户
提问于 2015-12-05 15:05:05
回答 3查看 15.1K关注 0票数 19

我的代码运行良好,但每当我出现编码错误并得到运行时错误时,我就会遇到一个恼人的问题。例如,在我的一个JSX页面中,我做了Date()而不是new Date(),而不是报告实际的错误,我得到了.

代码语言:javascript
复制
Uncaught Error: Expected the reducer to be a function.

我犯的任何错误几乎都是这样出现的。这是从createStore.js报告的,它在下面的configureStore.jsx代码中。

有什么方法可以让我得到更好的错误报告来帮助我识别真正的问题吗?任何帮助或想法都非常感谢!

这是我的设置以供参考..。

main.jsx

代码语言:javascript
复制
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { ReduxRouter } from 'redux-router';
import configureStore from './store/configureStore'
import routes from './routes';

const rootEl = document.getElementById('app-container');

const store = configureStore();

ReactDOM.render(
    <div>
        <Provider store={store}>
            <ReduxRouter routes={routes} />
        </Provider>
    </div>
    , rootEl
);

configureStore.jsx

代码语言:javascript
复制
import { createHashHistory } from 'history';
import { applyMiddleware, createStore, compose } from 'redux';
import { reduxReactRouter } from 'redux-router';

import thunk from 'redux-thunk';
import promiseMiddleware from 'redux-promise-middleware';

import rootReducer from '../reducers/rootReducer';
import routes from '../routes';

export default function configureStore(initialState = {}) {

    const history = createHashHistory();

    const middlewares = [
        thunk,
        promiseMiddleware({
            promiseTypeSuffixes: ['PENDING','SUCCESS','ERROR']
        })
    ];

    const toolChain = [
        applyMiddleware(...middlewares),
        reduxReactRouter({
            routes,
            history
        })
    ];

    const store = compose(...toolChain)(createStore)(rootReducer, initialState);

    if (module.hot) {
        module.hot.accept('../reducers', () => {
            const nextRootReducer = require('../reducers/rootReducer');
            store.replaceReducer(nextRootReducer);
        });
    }
    return store;
}

rootReducer.jsx

代码语言:javascript
复制
import { combineReducers } from 'redux';
import { routerStateReducer } from 'redux-router';
import siteReducer from './siteReducer';

const rootReducer = combineReducers({
    router: routerStateReducer,
    sites: siteReducer
});
export default rootReducer;

siteReducer.jsx

代码语言:javascript
复制
import {GET_SITES} from '../actions/siteActions';

const defaultState = {
    isPending: null,
    isSuccess: null,
    isError: null,
    error: null,
    data: null
};

export default function siteReducer(state = defaultState, action) {

    switch (action.type) {
        case `${GET_SITES}_PENDING`:
            return {
                ...defaultState,
                isPending: true
            };
        case `${GET_SITES}_SUCCESS`:
            return {
                ...defaultState,
                isSuccess: true,
                error: false,
                data: action.payload
            };
        case `${GET_SITES}_ERROR`:
            return {
                ...defaultState,
                isError: true,
                error: action.payload
            };
        default:
            return state;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2016-05-07 17:46:29

更改以下行:

代码语言:javascript
复制
const nextRootReducer = require('../reducers/rootReducer');

至:

代码语言:javascript
复制
const nextRootReducer = require('../reducers/rootReducer').default;
票数 11
EN

Stack Overflow用户

发布于 2016-03-02 13:40:49

每当您想要导出该变量时,请使用export const variable_name而不是const variable_name

对于示例: rootReducer.jsx应该重写为

代码语言:javascript
复制
import { combineReducers } from 'redux';
import { routerStateReducer } from 'redux-router';
import siteReducer from './siteReducer';

export const rootReducer = combineReducers({
router: routerStateReducer,
sites: siteReducer
});
export default rootReducer;

注意使用const rootReducer的额外导出说明符

票数 4
EN

Stack Overflow用户

发布于 2017-10-24 08:45:05

我的问题是从根还原器路径导入Store,而不是从实际的捆绑存储根导入store (使用devtools在窗口和根还原器、中间件等)。

import Store from '../../../src/state/Store/reducer';

变到

import Store from '../../../src/state/Store';

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34106975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档