0

说真的,我正在绝望地寻找问题所在。这几天找不到答案!

React.StrictModeAPI 导致我们setState被调用两次,对吧?如果它产生错误,则意味着我们的setState回调中的某个地方是不纯的。那么是哪一个呢?

setOrganization((initialValue) => {
    const newOrganization = { ...initialValue };

    const oldIssues = [...newOrganization.repository.issues.edges];
    const newIssues = [...data.data.organization.repository.issues.edges];

    newOrganization.repository.issues.edges = [...newIssues, ...oldIssues];

    return newOrganization;
});
  • 在第一次调用时,oldIssues返回预期值,例如[{id: issue1}, {id: issue2}]. newIssues值例如[{id: issue3}]

  • 但是在第二次调用时,oldIssues奇怪地变成了oldIssuesand的组合newIssues。(第二次通话,oldIssues 已经 [{id: issue1}, {id: issue2}, {id: issue3}])。

  • 使第二个newOrganization.repository.issues.edges值加倍newIssues[{id: issue1}, {id: issue2}, {id: issue3}, {id: issue3}]

完整的脚本可以在这里找到,第 101 行:https ://pastebin.com/ugsrBRTM

4

1 回答 1

1

感谢尼克帕森斯上面的评论,我只知道对象传播 只执行浅拷贝。我需要做的就是将复制方法更改为deep copy

我在这里找到了方法:在 JavaScript 中深度克隆对象的最有效方法是什么?

于 2020-07-12T15:49:30.197 回答