首页 > 解决方案 > 调度一个动作没有到达它的根减速器

问题描述

这是我的根减速器的外观:

import {combineReducers} from 'redux'

const initialState = {
    isAuthenticated: false,
    user: {}
}

function test(state=initialState, action) {

    switch(action.type) {
        case 'TEST_DISPATCH' : return { 
            ...state,
            user: action.payload
        }
        default : return state;
    } 
}

const rootReducer = combineReducers({test})

export default rootReducer

用它创建商店后,我有:

function mapStateToProps(state) {
  return {
    test: state.test
  }
}

接着:

const App = withRouter(connect(mapStateToProps, mapDispatchToProps)(Main))

在里面的某个地方Main,我有一个动作创建者,叫做: this.props.registerUser(some_payload)

它看起来像这样:

export function registerUser(userData) {

    return {
        type: 'TEST_DISPATCH',
        payload: userData
    }
}

当我调用它时,它会被调用,但从function test上面的 Root Reducer 之后永远不会被调用。

这是我的mapDispatchProps

function mapDispatchToProps(dispatch) {
  return bindActionCreators(actions, dispatch)

}

actions是一个导入的文件,它看起来像这样:

export function registerUser(userData) {

    return {
        type: 'TEST_DISPATCH',
        payload: userData
    }
}

标签: reactjsredux

解决方案


使用创建商店时,请createStore()确保您传递rootReducer如下:

import { createStore, applyMiddleware } from 'redux';
import rootReducer from './reducers';

const store = createStore(
  rootReducer
  // ... applyMiddleware(someMiddleware)
);

export default store;

如果将 the 传递给likerootReducer的第一个参数,reducer或任何其他 reducer 将永远不会被命中,因为它需要是一个直接返回下一个状态树的函数。createStore()() => rootReducertest

这是一个实际的例子

希望这会有所帮助!


推荐阅读