Redux推送到嵌套数组而不改变状态

时间:2017-08-12 22:43:42

标签: javascript reactjs ecmascript-6 redux react-redux

我有一个状态对象,如下所示:

$(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
}

1 个答案:

答案 0 :(得分:2)

您正在制作状态对象的浅层副本,您根本不复制任何属性值,包括数组本身,因此您正在改变数组。

您的.push调用会更改数组,因为您还没有创建新数组,这也会影响以前存储的所有状态对象。

你可以做到

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

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

改为创建一个新数组。