Javascript 如何让React停止监视父对象的状态?

Javascript 如何让React停止监视父对象的状态?,javascript,reactjs,Javascript,Reactjs,伙计们,我有一个obj,我从服务器上拉出来,进入状态响应。该对象有一个obj数组,我将其拉出并设置为不同的状态变量。如果我在我取出的对象的状态中更改某人,则会更改其原始父对象的状态。如何防止这种情况发生,以便用户可以选择将其保存到父级?这是我正在做的 const [responses, setResponses] = React.useState(); const [editedComponent, setEditedComponent] = React.useState({

伙计们,我有一个obj,我从服务器上拉出来,进入状态响应。该对象有一个obj数组,我将其拉出并设置为不同的状态变量。如果我在我取出的对象的状态中更改某人,则会更改其原始父对象的状态。如何防止这种情况发生,以便用户可以选择将其保存到父级?这是我正在做的

    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},但它也会更改响应的状态。