我找不到任何关于我的功能不纯的东西
I cannot find anything that is impure about my function
说真的,我迫不及待地想找出问题所在。我几天都找不到答案!
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}]
)。
使第二个 newOrganization.repository.issues.edges
值翻倍 newIssues
。 [{id: issue1}, {id: issue2}, {id: issue3}, {id: issue3}]
完整的脚本可以在这里找到,第 101 行:https://pastebin.com/ugsrBRTM
感谢 Nick Parsons 上面的评论,我只知道 object spreading 仅执行浅拷贝。我需要做的就是将复制方法更改为深复制。
我在这里找到了方法:What is the most efficient way to deep clone an object in JavaScript?
说真的,我迫不及待地想找出问题所在。我几天都找不到答案!
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}]
)。使第二个
newOrganization.repository.issues.edges
值翻倍newIssues
。[{id: issue1}, {id: issue2}, {id: issue3}, {id: issue3}]
完整的脚本可以在这里找到,第 101 行:https://pastebin.com/ugsrBRTM
感谢 Nick Parsons 上面的评论,我只知道 object spreading 仅执行浅拷贝。我需要做的就是将复制方法更改为深复制。
我在这里找到了方法:What is the most efficient way to deep clone an object in JavaScript?