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.
。现在它应该可以正常工作了