search

Home  >  Q&A  >  body text

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<code>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

</code>

天蓬老师天蓬老师2842 days ago608

reply all(3)I'll reply

  • ringa_lee

    ringa_lee2017-04-11 10:39:46

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

    reply
    0
  • 迷茫

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

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

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

    reply
    0
  • PHPz

    PHPz2017-04-11 10:39:46

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

    1

    2

    3

    4

    5

    6

    7

    <code>function mapStateToProps(state) {

        return {

            value: state.count,

            data:state.data,

            text:state.text

        }

    }</code>

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

    1

    2

    3

    4

    5

    6

    <code>{

        reducer1:{},

        reducer2:{},

        reducer3:{}

        .....

    }</code>

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

    1

    2

    3

    4

    5

    6

    7

    <code>function mapStateToProps(state) {

        return {

            value: state.reducer1.count,

            data:state.reducer1.data,

            text:state.reducer1.text

        }

    }</code>

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

    希望我能帮助你。

    reply
    0
  • Cancelreply