下面这个reducer,不用combineReducers是可以运行的,为什么用了就不行,也没报错,就是没有效果?

import { combineReducers } from 'redux';



function reducers(state = {
  text: '你好,访问者',
  name: '访问者'
}, action) {
  switch (action.type) {
    case 'change':
      return {
        name: action.payload,
        text: '你好,' + action.payload
      };
    default:
      return state;
  }
};



const reducer = combineReducers({
  reducers
  
})

export default reducer
阅读 3.3k
3 个回答

兄弟我来告诉你吧,之前我也遇到了相同的问题。解决很简单:
先来说说,不用combineReducers的时候,state 是一个对象,他就指 你的单个reducer, 所以你react-redux 中的connect 第一个参数函数可以这么写:

function mapStateToProps(state) {
    return {
        value: state.count,
        data:state.data,
        text:state.text
    }
}

上面是没有问题的,但是当你用了combineReducers 的时候,他就好比像这样了:

{ 
    reducer1:{},
    reducer2:{},
    reducer3:{}
    .....
}

你因该明白了吧,你那个是没有反映也不抱错,是因为获取的都是null,也就是 state.xxx 是null了,
你只要,修改如下:

function mapStateToProps(state) {
    return {
        value: state.reducer1.count,
        data:state.reducer1.data,
        text:state.reducer1.text
    }
}

其中reducer1 就是你combineReducers 中的一个key值。
不同的reducer 有不同的名字

希望我能帮助你。

不知道你说的没效果是没什么效果。。。确认一点,你的数据是保存在state.reducers下面的,并不是state下面的

  1. reducer的函数名一般是有意义的

  2. combineReducers一般是组合多个子reducer,只传一个不确定行不行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏