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

Moh*_*mad 7 javascript reactjs redux react-redux

我开始学习更好的redux+reactjs

例如,我有一个新闻或列表缩减程序,它应该返回一个包含新闻项的数组:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但在其他文章中我看到它们以 [...state, ...] 和不可变格式传递参数...

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

谢谢

Ani*_*ift 7

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

如果您要使用简单数组,请确保在进行修改时返回一个新数组。

例如:

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;
  }
};
Run Code Online (Sandbox Code Playgroud)

您不需要将 immutablejs 数据结构与 redux 一起使用。只是推荐这样做,这样您就不会意外改变数据结构。

文档指出数据需要不可变,因为

Redux 和 React-Redux 都采用浅层相等检查。尤其:

Redux 的combineReducers 实用程序浅层检查由它调用的reducer 引起的引用更改。