Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 当我在react中更新状态时,这就是我避免状态突变的方法吗?_Javascript_Reactjs - Fatal编程技术网

Javascript 当我在react中更新状态时,这就是我避免状态突变的方法吗?

Javascript 当我在react中更新状态时,这就是我避免状态突变的方法吗?,javascript,reactjs,Javascript,Reactjs,我读到我应该使用函数setState,也不要改变我的状态 是这样吗 onChangeTextInput = ({ name, value }) => { this.setState(state => ({ ...state, form: { ...state.form, [name]: value } })); }; 以上是您尝试执行的操作的简单形式。当它说“不直接变异”时,它的意思是不要做类似

我读到我应该使用函数setState,也不要改变我的状态

是这样吗

onChangeTextInput = ({ name, value }) => {
    this.setState(state => ({
      ...state,
      form: {
        ...state.form,
        [name]: value
      }
    }));
  };

以上是您尝试执行的操作的简单形式。当它说“不直接变异”时,它的意思是不要做类似于
this.state.form=newObj

Yes:)的事情。如果您对提供的答案感到困惑,当您设置状态属性时,此更新的属性将与状态合并。因此,这里不必要的部分是
…state
。您只需设置
表单
属性。
状态
在代码中未定义。OP做得不错。现在,您应该在这里使用functional
setState
,因为这取决于代码中的当前状态。同样,OP做得不错:)@devserkan:我想把它改成this.state.form好吗?无论如何,我的答案正是你要指出的一点,
…state
是不必要的,我们可以直接将对象传递给setState,而不是function是的,
…state
是OP代码中不必要的部分,但它不会损害任何东西。由于您已经提供了答案,如果您使用功能性
设置状态
更改代码,并解释为什么不需要
…状态
部分,则OP可以接受。这里需要功能性部分,而不是提供对象。因为我们依赖于当前的状态。因此,我们应该避免直接设置状态。
this.setState({ form: {...this.state.form, [name]: value }});