Javascript 我找不到关于我的功能的任何不纯洁的东西

Javascript 我找不到关于我的功能的任何不纯洁的东西,javascript,reactjs,setstate,pure-function,Javascript,Reactjs,Setstate,Pure Function,说真的,我正在拼命寻找问题所在。我好几天都找不到答案 React.StrictModeAPI导致调用我们的setState两次,对吗?如果它产生了一个错误,那么这意味着我们的setState回调中的某个地方是不纯净的。那么,是哪一个呢 setOrganization((initialValue)=>{ const newOrganization={…initialValue}; constOldIssues=[…newOrganization.repository.issues.edges];

说真的,我正在拼命寻找问题所在。我好几天都找不到答案

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

setOrganization((initialValue)=>{
const newOrganization={…initialValue};
constOldIssues=[…newOrganization.repository.issues.edges];
const newIssues=[…data.data.organization.repository.issues.edges];
newOrganization.repository.issues.edges=[…新问题,…旧问题];
返回新组织;
});
  • 在第一次调用中,
    oldIssues
    返回预期值,例如,
    [{id:issue1},{id:issue2}]
    <代码>新问题值是例如
    [{id:issue3}]

  • 但是在第二次呼叫中,
    旧问题
    奇怪地变成了
    旧问题
    新问题
    的组合。(第二个调用,
    oldIssues
    已经是
    [{id:issue1}、{id:issue2}、{id:issue3}]

  • 第二个
    newOrganization.repository.issues.edges
    值的
    newIssues
    值加倍<代码>[{id:issue1}、{id:issue2}、{id:issue3}、{id:issue3}]


完整的脚本可以在这里找到,第101行:

多亏了尼克·帕森斯(Nick Parsons)在上面的评论,我才知道对象传播只执行浅拷贝。我需要做的就是将复制方法更改为深度复制


我在这里找到了方法:

newOrganization={…initialValue}
是对象的浅层副本,所以
initialValue
仍在修改中?我就知道。有什么建议我可以解决吗?哦,忘了我刚才问的。一个愚蠢的问题。我可以用谷歌搜索一下。谢谢你,天哪!我刚刚将代码更改为
constneworganization=JSON.parse(JSON.stringify(initialValue))和BAM!它很有魅力!谢谢你通知我这件事。我很感激你,不用担心