Javascript 如何让React停止监视父对象的状态?
伙计们,我有一个obj,我从服务器上拉出来,进入状态响应。该对象有一个obj数组,我将其拉出并设置为不同的状态变量。如果我在我取出的对象的状态中更改某人,则会更改其原始父对象的状态。如何防止这种情况发生,以便用户可以选择将其保存到父级?这是我正在做的Javascript 如何让React停止监视父对象的状态?,javascript,reactjs,Javascript,Reactjs,伙计们,我有一个obj,我从服务器上拉出来,进入状态响应。该对象有一个obj数组,我将其拉出并设置为不同的状态变量。如果我在我取出的对象的状态中更改某人,则会更改其原始父对象的状态。如何防止这种情况发生,以便用户可以选择将其保存到父级?这是我正在做的 const [responses, setResponses] = React.useState(); const [editedComponent, setEditedComponent] = React.useState({
const [responses, setResponses] = React.useState();
const [editedComponent, setEditedComponent] = React.useState({
name: '',
things: [],});
const handleChangeSelectComponent = (e) => {
const name = e.target.value;
setEditedComponent(responses.find((response) => response.name === name));
};
const handleChange = (e) => {
const { id, value } = e.target;
const index = parseInt(id);
const obj = { ...editedComponent };
obj.things[index].whatsWrong = value;
setEditedComponent(obj);
};
我只想能够编辑editedComponent,然后选择是否将其保存到响应中。任何帮助都将不胜感激。让它们都处于状态很好,但我想我可能必须拿出一个?您可能认为这行代码复制了您的editedComponent:
const obj={…editedComponent};
//但这实际上相当于
//常量obj={}
//obj.name=editedComponent.name
//obj.things=editedComponent.things
//这里,obj.things===editedComponent.things:(
但它只是复制外部对象,而不是内部的东西数组。因此,当您执行以下操作时:
obj.things[index].WhatsError=value;
实际上,您正在修改的数组与响应中的数组相同
如果要修改对象中的嵌套属性,需要克隆完整对象,否则将修改原始数据。以下是解决此问题的一种方法:
const obj=JSON.parse(JSON.stringify(editedComponent))
但您也可以在上查找克隆(对象)
函数。您试图做的不够清楚,状态变量(responses和editedComponent)令人困惑。此外,您正在更改状态变量内容的形状(至少是editedComponent)。它从{name:string,responses:Response[]}
最初是在handleChangeSelectComponent
中的Response
。是的,我需要其他名称来解释这一点,但会进行编辑。响应会加载如下数组[{name:example,响应:[{item},{item}]},{name:anotherExample,响应:[{item},{item}]}。然后我拉出其中一个对象并保存在editedComponet中,然后在editedComponet中编辑{item},但它也会更改响应的状态。