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
值加倍<代码>[{id:issue1}、{id:issue2}、{id:issue3}、{id:issue3}]newIssues
完整的脚本可以在这里找到,第101行:多亏了尼克·帕森斯(Nick Parsons)在上面的评论,我才知道对象传播只执行浅拷贝。我需要做的就是将复制方法更改为深度复制
我在这里找到了方法:
newOrganization={…initialValue}
是对象的浅层副本,所以initialValue
仍在修改中?我就知道。有什么建议我可以解决吗?哦,忘了我刚才问的。一个愚蠢的问题。我可以用谷歌搜索一下。谢谢你,天哪!我刚刚将代码更改为constneworganization=JSON.parse(JSON.stringify(initialValue))代码>和BAM!它很有魅力!谢谢你通知我这件事。我很感激你,不用担心