搜索

首页  >  问答  >  正文

javascript - 下面这个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
天蓬老师天蓬老师2804 天前587

全部回复(3)我来回复

  • ringa_lee

    ringa_lee2017-04-11 10:39:46

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

    回复
    0
  • 迷茫

    迷茫2017-04-11 10:39:46

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

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

    回复
    0
  • PHPz

    PHPz2017-04-11 10:39:46

    兄弟我来告诉你吧,之前我也遇到了相同的问题。解决很简单:
    先来说说,不用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 有不同的名字

    希望我能帮助你。

    回复
    0
  • 取消回复