N.S*_*.SH 4 javascript jsx ecmascript-6 reactjs
我的组件中有一个状态,我想在单击“保存”按钮时克隆该状态,并更改和删除克隆的某些属性,然后发布到后端,但是当我更改克隆数组时,原始状态也会改变;我不知道该怎么办,我追踪了克隆数组的所有方法,但所有这些方法都没有帮助我;下面是我的代码:
.
.
.
const [steps , setSteps] = useState([
{
id: 1,
// content: "item 1 content",
subItems: [
{
id: 10,
isNew : false ,
hasWorkflow : true ,
title : 'SubItem 10 content' ,
approverType : 1,
approverId : 0 ,
},
{
id: 11,
isNew : false ,
hasWorkflow : true ,
title : 'SubItem 11 content' ,
approverType : 2,
approverId : 1 ,
}
]
},
{
id: 2,
// content: "item 2 content",
subItems: [
{
id: 20,
isNew : false ,
hasWorkflow : false ,
title : 'SubItem 20 content' ,
approverType : 2,
approverId : 4 ,
},
{
id: 21,
isNew : false ,
hasWorkflow : false ,
title : 'SubItem 21 content' ,
approverType : 1,
approverId : 3,
}
]
} ,
{
id: 3,
content: "item 3 content",
subItems: [
{
id: 55,
isNew : false ,
hasWorkflow : false ,
title : 'SubItem 20 content' ,
approverType : 2,
approverId : 6 ,
},
{
id: 66,
isNew : false ,
hasWorkflow : false ,
title : 'SubItem 21 content' ,
approverType : 2,
approverId : 4 ,
}
]
}
]);
.
.
.
.
function handleSaveWorkflow(){
//const _result = steps.slice(0);
let _result = [...steps];
_result.map((item , index) => {
item.subItems.map((i , ind) => {
delete i.hasWorkflow;
if(i.isNew){
i.id = null;
}
delete i.isNew;
return i;
});
return item;
});
const _final = {"steps" : [..._result]};
console.log('result : : : : : : :: : :: : ' , _final);
console.log('steps : : : : : : :: : :: : ' , steps);
// alert(_final);
workflowAxios.post(`/workflow-templates/${props.id}/workflow-template-steps` , '' , _final)
.then(response => {
console.log('response e e e e e e e : ' , response);
// setSteps(response);
})
.catch(error => {
console.log('error r r r r r r r r r : ' , error);
});
}
Run Code Online (Sandbox Code Playgroud)
对于深度复制试试这个
let _result = JSON.parse(JSON.stringify(steps));
Run Code Online (Sandbox Code Playgroud)
或者
const newArray = steps.map(step => ({...step}));
Run Code Online (Sandbox Code Playgroud)
扩展语法不提供深层复制
深拷贝
深层复制意味着实际上创建一个新数组并复制其中的值,因为它发生的任何事情都不会影响原始数组。
为了获得更多说明和更好的理解,您可以参考如何在 Javascript 中克隆数组?
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |