用reducer替换数组中的对象

时间:2020-02-13 23:56:57

标签: javascript reactjs

我想使用id替换对象数组中的对象,以找到它, 有效负载具有新对象

const initialState = {
  allComments: []
};

case LIKE_COMMENT:
      let index = state.allComments.findIndex(
        value => value._id === payload._id
      );
      if (index === -1) {
        return {
          ...state,
          allComments: [...state.allComments, ...payload]
        };
      } else {
        return {
          ...state,
          allComments: [
            (state.allComments[index] = payload),
            ...state.allComments
          ]
        };
      }

问题在于,它不断推动该对象而不替换上一个对象

3 个答案:

答案 0 :(得分:2)

cover

这会将注释替换为有效负载,并返回所有其他注释

答案 1 :(得分:1)

我认为您实际上需要根据旧数组定义一个新数组,然后将其返回到状态:

nginx: [emerg] bind() to unix:/var/run/nchan.sock failed (98: Address already in use)

答案 2 :(得分:1)

您可以使用map创建allComments数组的浅表副本,将匹配索引替换为有效负载:

case LIKE_COMMENT:
    return {
      ...state,
      allComments: state.allComments.map(c => c._id === payload._id ? payload : c)
    };