我是JavaScript的新手,会做出反应(16.9.0),所以我希望这个问题不太明显:
我知道我可以用'...'复制字典,例如:const dict_new = {... dict_old} 我正在使用此表达式来避免引用副本。问题是,当我在异步componentDidmount()中定义字典并对其进行复制时,尽管定义正确,但该副本仍是引用的副本。让我展示我的代码:
async componentDidmount() {
try {
const res1 = await fetch('/postmongo/group/');
let grupos = await res1.json();
const res2 = await fetch('/postmongo/permiso/');
const permisos = await res2.json();
const dict_permisos = {};
permisos.forEach((perm) => {
dict_permisos[perm.descripcion] = {};
grupos.forEach((gr) => {
if (gr.Permisos_gemelo.some((p) => (p.nombre === perm.nombre))) {
dict_permisos[perm.descripcion][gr.name] = true;
} else {
dict_permisos[perm.descripcion][gr.name] = false;
}
});
});
const dict_permisos_inicial = {...dict_permisos}
this.setState({
grupos,permisos,dict_permisos,dict_permisos_inicial,});
console.log(this.state);
} catch (e) {
console.log(e);
}
}
dict_permisos_inicial是引用副本(即,当dict_permisos更改时,它正在更改),它应该是独立的。我想念什么?我通过两次定义字典来解决,也许我应该在componentDidmount()之外构建字典,但是,在哪里?