Reactjs Redux reducer-使用forEach修改数组

Reactjs Redux reducer-使用forEach修改数组,reactjs,redux,Reactjs,Redux,在Redux中获取和基于响应更新我的状态内的数组时有一个小问题 首先,我用forEach在actions中完成了整个数组更新(基于我的初始状态对象),并将其发送到reducer,它成功了。简单 但是,请阅读教程,修改应该只在reducer中进行,并且该操作应该只处理获得响应的问题。所以我试过这样做,两种方式,都失败了 在这两种情况下,我发送给reducer的有效负载就是我得到的现成响应 有人能告诉我哪里出了问题,正确的方法是什么吗 两种方法都不起作用: export const handleMu

在Redux中获取和基于响应更新我的状态内的数组时有一个小问题

首先,我用forEach在actions中完成了整个数组更新(基于我的初始状态对象),并将其发送到reducer,它成功了。简单

但是,请阅读教程,修改应该只在reducer中进行,并且该操作应该只处理获得响应的问题。所以我试过这样做,两种方式,都失败了

在这两种情况下,我发送给reducer的有效负载就是我得到的现成响应

有人能告诉我哪里出了问题,正确的方法是什么吗

两种方法都不起作用:

export const handleMusicCards=(state=musicState,action={})=>{ 开关(动作类型){

} }

export const handleMusicCards=(state=musicState,action={})=>{ 开关(动作类型){

}
}

读完后,我不确定故障发生在哪里。关于redux约定的更多信息

动作对象仅用于描述应该对状态进行哪些更改。减速器是实际应更改状态的位置。在redux中,您永远不想修改state对象,而是希望复制它并返回一个新的对象和更改,如action对象所述

所以你可能有一个减速箱,看起来像这样

const reducer = (state, action) => {
    switch (action.type) {
        case NEW_RECORD_SUBMIT :
            return {
                ...state,
                newRecordStatus: action.status,
            };
    default :
          return state;
  }
};

现在问题解决了。非常愚蠢的错误,switch语句中的大小写错误…选择了我尝试的第二个选项,使用map()

Array.prototype.forEach
不会向调用方返回任何内容,您确定您不是要使用
Array.prototype.map
?是的,抱歉,在第二个示例中应该是map。仍然不起作用,这一次出现错误“无法读取未定义”的属性“body”,这很奇怪。
case REQUEST_MUSIC_SUCCESS:
  return Object.assign({}, state, {
    musicStateItemList: state.musicStateItemList
      .forEach((el, i) => {
        return {
          ...el,
          track: action.payload.message.body.track_list[i].track.track_name,
          album: action.payload.message.body.track_list[i].track.album_name,
          artist: action.payload.message.body.track_list[i].track.artist_name,
          id: action.payload.message.body.track_list[i].track.track_id,
          favClicked: false,
          addedToFav: false,
        }
      }),
    isLoading: false
  });
const reducer = (state, action) => {
    switch (action.type) {
        case NEW_RECORD_SUBMIT :
            return {
                ...state,
                newRecordStatus: action.status,
            };
    default :
          return state;
  }
};