2017-08-29 18 views
3

刪除元素我有一個狀態對象,看起來像這樣:從一個嵌套的數組,而無需使用不變性助手

//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 
    } 
} 

我想寫一個減速,消除給刪除沒有索引頁面元素使用不變性幫手

這就是我想要做的,但我的語法是關閉的,我不知道什麼是寫減速的正確方法:

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 USING不可變性助手是否搞亂了我的Firebase數據庫,所以我想弄清楚如何使用不可變性助手來編寫reducer我可以幫助消除我的錯誤。

+0

[卸下在嵌套數組的元素,但火力地堡轉彎陣列成的可能的複製對象(https://stackoverflow.com/questions/45930388/removing-an-element-in-a-nested-array-but-firebase-is-turning-the-array-into-an) – Panther

+0

@Panther以及我問這個問題,因爲我想,如果我的減速器使用不可改變的幫手是搞亂米至弄清楚Ÿ火力地堡的數據庫,所以我試圖找出如何寫減速離不開它。 – user1189352

回答

1

使用spread operator,並把它寫入這樣的:

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 
      } 
     } 
    } 
} 
+0

「let playlistCopy = [...(state.playlistDict [action.playlistId] .pages)];」我的IDE不喜歡這一行 – user1189352

+0

更新答案的語法工作。 TY – user1189352

1

使用對象傳播算子:

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) 
     } 
    } 
    } 
} 
+0

這其中刪除了某些原因,所有的頁面..頁面屬性爲null – user1189352

+1

對不起,我錯過了'在最後一行.pages.'。現在它應該運作良好 –

相關問題