我有一个状态对象,如下所示:
$(document).on("scrollstop", function () {
if (!isScrolledIntoView()) {
setTimeout(function() { $("#my-div").css("bottom", "0"); }, 800);
};
我正在尝试更新“pages”数组,但我一直在收到一个错误,说我正在改变状态..我不明白,因为如果我正在使用Object复制状态对象。分配...我如何改变国家?谢谢你的帮助
PlaylistDictionary: {
someId: {
pages: [] // trying to push something to this array here
},
someId2: {
pages: [] // trying to push something to this array here
}, etc
}
答案 0 :(得分:2)
您正在制作状态对象的浅层副本,您根本不复制任何属性值,包括数组本身,因此您正在改变数组。
您的.push
调用会更改数组,因为您还没有创建新数组,这也会影响以前存储的所有状态对象。
你可以做到
playlistDictCopy[ action.playlistId ].pages = playlistDictCopy[ action.playlistId ].pages.concat([action.pageId]);
或
playlistDictCopy[ action.playlistId ].pages = [ ...playlistDictCopy[ action.playlistId ].pages, action.pageId]);
改为创建一个新数组。