2017-08-12 19 views
0

変異させずにネストされた配列にプッシュ:私は「ページ」配列を更新しようとしているが、私は、私は「というエラーを取得しておくReduxのは、私はこのようになります状態オブジェクト持っている状態

PlaylistDictionary: { 
    someId: { 
    pages: [] // trying to push something to this array here 
    }, 
    someId2: { 
    pages: [] // trying to push something to this array here 
    }, etc 
} 

を状態を変更しています。Object.assignを使用して状態オブジェクトのコピーを作成している場合、私は理解できません...どのように状態を変更していますか?あなたは、のすべてのプロパティ値のいずれかをコピーする配列自体を含むので、あなたは、配列を変異されていない、状態オブジェクトの簡易コピーを作っている任意のヘルプ

case types.ADD_PAGE_TO_PLAYLIST: { 
    let playlistDictCopy = Object.assign({}, state.playlistDict); 

    if (!playlistDictCopy[ action.playlistId ].hasOwnProperty('pages')) { 
    playlistDictCopy[ action.playlistId ].pages = []; 
    } 

    playlistDictCopy[ action.playlistId ].pages.push(action.pageId); 

    return Object.assign({}, state, { playlistDict: playlistDictCopy }); 
} 

答えて

2

していただきありがとうございます。

.push呼び出しによって配列が変更され、新しい配列が作成されていないため、以前に保存されたすべての状態オブジェクトにも影響します。

代わりに、新しい配列を作成するために、

playlistDictCopy[ action.playlistId ].pages = playlistDictCopy[ action.playlistId ].pages.concat([action.pageId]); 

または

playlistDictCopy[ action.playlistId ].pages = [ ...playlistDictCopy[ action.playlistId ].pages, action.pageId]); 

を行うことができます。

+0

今すぐ解説しよう – user1189352

関連する問題