说真的,我正在不顾一切地寻找问题所在。我好几天都找不到答案了!
React.StrictMode
API导致我们的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
奇怪地变成了oldIssues
和newIssues
的组合。(第二次调用,oldIssues
已就绪[{id: issue1}, {id: issue2}, {id: issue3}]
(。使第二个CCD_ 13值具有加倍的CCD_。
[{id: issue1}, {id: issue2}, {id: issue3}, {id: issue3}]
完整的脚本可以在这里的第101行找到:https://pastebin.com/ugsrBRTM
感谢Nick Parsons在上面的评论,我只知道对象传播只执行浅层复制。我所需要做的就是将复制方法更改为深度复制。
我在这里找到了一个方法:在JavaScript中深度克隆对象最有效的方法是什么?