Redux reducer:在编辑时映射或不映射

时间:2018-03-16 16:11:06

标签: reactjs redux reducers

我试图弄清楚我是否在我的减速机中使用了地图。

这是上下文。

我有一个由......组成的redux状态。

friends [{}, {}]
pets [{}, {}]
users [{}, {}]

其中3个是基于GET响应的对象数组(本地API)

以下是friends数组的一个对象的示例。

{
  id: '982347646324',
  name: 'Peter',
  lastName: 'Doe',
  age: 40
}

所以......现在让我们说我要编辑这个条目。

我目前的减速机案例是......

...
      case EDIT_FRIEND:
      return state.map(el => {
        if (el.id === action.payload.data.id) {
          return {
            ...el,
            name: action.payload.data.name,
            lastName: action.payload.data.lastName,
            age: action.payload.data.age
          }
        }
        return el
      });
...

      default:
      return state;

由于我是新手并且在学习过程中,我应该问: 这是正确的做法......? 它是有效的,是的,但我想学习并正确地做到这一点。

我应该以其他方式这样做吗? 我应该映射还是不映射......?任何帮助都会非常有帮助。

很多人

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到,你使用的map方法就是这样,使用它完全没问题。另一个解决方案是使用spread syntax并更新所需的对象,如

...
  case EDIT_FRIEND: {
      const index = state.findIndex(obj => obj.id === action.payload.data.id);
      return [
         ...state.slice(0, index),
         {
            ...state[index],
            name: action.payload.data.name,
            lastName: action.payload.data.lastName,
            age: action.payload.data.age
          }
          ...state.slice(index + 1)
      ]
 }
 ...

 default:
   return state;

您可以选择使用上述两种解决方案中的任何一种解决方案。你必须记住的是,你并没有直接改变商店状态。

答案 1 :(得分:0)

你不应该在减速机中做的事情

  1. 使其不纯洁
  2. 改变状态
  3. 由于您使用的是map方法,因此每次都会返回一个新数组并且不会改变您之前的数组。所以,使用map完全没问题。