[英]Redux pushing to a nested array without mutating the state
我有一个看起来像这样的状态对象:
PlaylistDictionary: {
someId: {
pages: [] // trying to push something to this array here
},
someId2: {
pages: [] // trying to push something to this array here
}, etc
}
我正在尝试更新“ pages”数组,但是我不断收到一条错误消息,说我正在改变状态。.我不明白,因为如果我使用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 } );
}
您正在制作状态对象的浅表副本,根本不复制任何属性值,包括数组本身,因此要对数组进行突变。
您的.push
调用会更改数组,并且由于尚未创建新数组,因此也会影响所有以前存储的状态对象。
你可以做
playlistDictCopy[ action.playlistId ].pages = playlistDictCopy[ action.playlistId ].pages.concat([action.pageId]);
要么
playlistDictCopy[ action.playlistId ].pages = [ ...playlistDictCopy[ action.playlistId ].pages, action.pageId]);
而是创建一个新数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.