Reactjs 从嵌套数组中删除元素,而不使用不变性帮助器

Reactjs 从嵌套数组中删除元素,而不使用不变性帮助器,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我有一个状态对象,如下所示: //State Object playlistDict: { someId1: { active: false, id: 'someId', name: 'someName', pages: [ 'pageId1', 'pageId2', 'pageId3', etc ] // I want to remove an element from this array }, someId2: { active: fa

我有一个状态对象,如下所示:

//State Object
playlistDict: {
  someId1: {
    active: false,
    id: 'someId',
    name: 'someName',
    pages: [ 'pageId1', 'pageId2', 'pageId3', etc ]  // I want to remove an element from this array
  },
  someId2: {
    active: false,
    id: 'someId2',
    name: 'someName2',
    pages: [ 'pageId11', 'pageId22', 'pageId33', etc ] // I want to remove an element from this array
  }
}
case types.REMOVE_PAGE_FROM_PLAYLIST: {    
    let playlistCopy = [...(state.playlistDict[ action.playlistId ].pages)];
    playlistCopy.splice( action.pageIndex, 1 );

    return {
        ...state,
        playlistDict: {
            ...state.playlistDict,
            [action.playlistId]: {
                ...state.playlistDict[action.playlistId],
                pages: playlistCopy
            }
        }
    }
}
我正在尝试编写一个reducer,在给定要删除的索引的情况下删除页面元素,而不使用immutability helper

这就是我试图做的,但我的语法不正确,我不确定写减速机的正确方法是什么:

export function _removePageFromPlaylist( playlistId, pageIndex ) {
  return { type: types.REMOVE_PAGE_FROM_PLAYLIST, playlistId, pageIndex };
}

case types.REMOVE_PAGE_FROM_PLAYLIST: {    
      let playlistCopy = Object.assign( {}, state.playlistDict[ action.playlistId ]);
      playlistCopy.pages = Object.assign( {}, state.playlistDict[ action.playlistId ].pages );
      playlistCopy.pages.splice( action.pageIndex, 1 );

      return Object.assign({}, state, {
        playlistDict: { ...state.playlistDict, playlistDict[ action.playlistId ]: playlistCopy }  // doesn't like this syntax in particular
      });
    }
编辑:关于人们认为这与我的另一个问题相同的问题,我问这个问题是因为我试图弄清楚我的使用不变性助手的reducer是否弄乱了我的Firebase数据库,所以我试图弄清楚如何在不使用不变性助手的情况下编写reducer,以便帮助消除我的bug。

使用,这样写:

//State Object
playlistDict: {
  someId1: {
    active: false,
    id: 'someId',
    name: 'someName',
    pages: [ 'pageId1', 'pageId2', 'pageId3', etc ]  // I want to remove an element from this array
  },
  someId2: {
    active: false,
    id: 'someId2',
    name: 'someName2',
    pages: [ 'pageId11', 'pageId22', 'pageId33', etc ] // I want to remove an element from this array
  }
}
case types.REMOVE_PAGE_FROM_PLAYLIST: {    
    let playlistCopy = [...(state.playlistDict[ action.playlistId ].pages)];
    playlistCopy.splice( action.pageIndex, 1 );

    return {
        ...state,
        playlistDict: {
            ...state.playlistDict,
            [action.playlistId]: {
                ...state.playlistDict[action.playlistId],
                pages: playlistCopy
            }
        }
    }
}

使用对象扩展操作符:

case types.REMOVE_PAGE_FROM_PLAYLIST: {
  return {
    ...state,
    playlistDict: {
      ...state.playlistDict,
      [action.playlistId]: {
        ...state.playlistDict[action.playlistId],
        pages: [...state.playlistDict[action.playlistId].pages].splice(action.pageIndex, 1)
      }
    }
  }
}

@Panther可能重复我之所以问这个问题,是因为我想知道我的使用不变性助手的reducer是否会弄乱我的Firebase数据库,所以我想知道如何在没有它的情况下编写reducer。“让PlayCopy=[…(state.playDict[action.playId].pages)]我的IDE不喜欢该行的语法这一行出于某种原因删除了所有页面。。pages属性为Null抱歉,我错过了最后一行的
.pages.
。现在它应该可以正常工作了