Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更改阵列的克隆而不更改reactjs中的原始阵列_Javascript_Reactjs_Ecmascript 6_Jsx - Fatal编程技术网

Javascript 如何更改阵列的克隆而不更改reactjs中的原始阵列

Javascript 如何更改阵列的克隆而不更改reactjs中的原始阵列,javascript,reactjs,ecmascript-6,jsx,Javascript,Reactjs,Ecmascript 6,Jsx,我的组件中有一个状态,当单击“保存”按钮并更改和删除克隆的某些属性,然后发布到后端时,我希望克隆此状态,但当我更改克隆阵列时,原始状态也会更改;我不知道该怎么办,我追踪了克隆阵列的所有方法,但它们都没有帮助我; 以下是我的密码: . . . 常量[步骤,设置步骤]=使用状态[ { id:1, //内容:第1项内容, 分项:[ { id:10, isNew:错, 哈斯:是的, 标题:“第10项内容”, 批准人类型:1, 批准者ID:0, }, { id:11, isNew:错, 哈斯:是的, 标题

我的组件中有一个状态,当单击“保存”按钮并更改和删除克隆的某些属性,然后发布到后端时,我希望克隆此状态,但当我更改克隆阵列时,原始状态也会更改;我不知道该怎么办,我追踪了克隆阵列的所有方法,但它们都没有帮助我; 以下是我的密码:

. . . 常量[步骤,设置步骤]=使用状态[ { id:1, //内容:第1项内容, 分项:[ { id:10, isNew:错, 哈斯:是的, 标题:“第10项内容”, 批准人类型:1, 批准者ID:0, }, { id:11, isNew:错, 哈斯:是的, 标题:“第11项内容”, 批准类型:2, 批准人ID:1, } ] }, { id:2, //内容:第2项内容, 分项:[ { 身份证号码:20, isNew:错, hasWorkflow:错误, 标题:“第20项内容”, 批准类型:2, 批准人编号:4, }, { id:21, isNew:错, hasWorkflow:错误, 标题:“第21项内容”, 批准人类型:1, 批准人编号:3, } ] } , { id:3, 内容:第3项内容, 分项:[ { 身份证号码:55, isNew:错, hasWorkflow:错误, 标题:“第20项内容”, 批准类型:2, 批准人编号:6, }, { 身份证号码:66, isNew:错, hasWorkflow:错误, 标题:“第21项内容”, 批准类型:2, 批准人编号:4, } ] } ]; . . . . 函数handleSaveWorkflow{ //const_result=steps.0; 让_result=[…步]; _result.mapitem,索引=>{ item.subItems.mapi,ind=>{ 删除i.hassworkflow; 如果是新的{ i、 id=null; } 删除i.isNew; 返回i; }; 退货项目; }; 常量_final={steps:[…_result]}; console.log'result::',_final; console.log'steps::',steps; //警报(最后);; workflowAxios.post`/workflow templates/${props.id}/workflow template steps`、、\u final .thenresponse=>{ console.log'response e:',response; //设置步骤响应; } .catcherror=>{ console.log'error:',error; }; } 要获得深度复制,请尝试此选项

  let _result = JSON.parse(JSON.stringify(steps));

spread语法不提供深度副本

深度复制

深度复制意味着实际创建一个新数组并在值上进行复制,因为对它发生的任何事情都不会影响原始数组

要获得更多的澄清和更好的理解,您可以参考

了解深度复制,请尝试以下内容

  let _result = JSON.parse(JSON.stringify(steps));

spread语法不提供深度副本

深度复制

深度复制意味着实际创建一个新数组并在值上进行复制,因为对它发生的任何事情都不会影响原始数组


为了获得更多的澄清和更好的理解,您可以参考

解析和取消解析可能会对性能造成相当大的影响,这取决于具体情况,一种方便的替代方法是,如果您在项目中使用“Lodash”,您只需像这样使用:


这将返回一个新数组,保留原始数组不变。

解析和取消解析可能会对性能造成相当大的影响,这取决于具体情况,一种方便的替代方法是,如果在项目中使用“Lodash”,您可以像这样使用:


这将返回一个新数组,保留原始数组不变。

感谢您的帮助我尝试了您的第一个解决方案它成功了非常感谢。感谢您的帮助我尝试了您的第一个解决方案它成功了非常感谢。
const newArr = _.cloneDeep( steps );