代码之家  ›  专栏  ›  技术社区  ›  Mohammad

我可以在redux状态下传递简单数组吗?

  •  3
  • Mohammad  · 技术社区  · 6 年前

    我开始学习更好的Redux+ReactJS

    例如,我有一个News或List Reducer,它应该返回一个包含News项的数组:

    const list = [
        {id: 1, title: 'One'},
        {id: 2, title: 'Two'},
        {id: 3, title: 'Three'}
    ]
    
    export function newsReducer(state = [], action) {
        switch (action.type) {
            case 'GET_NEWS':
                return list
            default:
                return state
        }
    }

    这段代码是正确的,但在其他文章中,我看到他们传递的参数有[…状态,…]和不可变格式…

    那么,我可以简单地传递参数,还是应该以不变的格式传递参数?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  3
  •   intentionally-left-nil    6 年前

    简而言之:是的,如果最适合您的需要,您可以传递简单的数组。

    如果要使用简单数组,请确保返回 新的 进行修改时排列。

    例如:

    export function listChangeReducer = (state = [], action) => {
      switch action.type {
        case 'ADD_ITEM':
          // don't do this because you're mutating your state
          // state.push(action.item);
          // instead do this
          state = state.slice();
          state.push(action.item);
          // or alternatively you can use the destruct syntax
          //[...state, action.item];
          return state;
    
        break;
      }
    };
    

    不需要使用带有redux的不可变JS数据结构。建议您不要意外地改变数据结构。

    这个 documentation 声明数据必须是不可变的,因为

    Redux和React Redux都使用浅相等检查。在 特别说明:

    Redux的CombineReducers实用程序会简单检查参考更改 因为它调用的减速器。