Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.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 插入数组时发生变异-Reactjs_Javascript_Reactjs - Fatal编程技术网

Javascript 插入数组时发生变异-Reactjs

Javascript 插入数组时发生变异-Reactjs,javascript,reactjs,Javascript,Reactjs,我有一个状态对象,看起来像这样 this.state = { formValues: {}, }; 经过一些处理后,formValues包含以下内容 this.state = { formValues: { q1: value 1, q2: value 2 }, }; 现在我在formValues中有了q3,这是一个值数组。当我尝试按下如下所示的值时 l

我有一个状态对象,看起来像这样

 this.state = {
      formValues: {},
    };
经过一些处理后,formValues包含以下内容

 this.state = {
          formValues: {
              q1: value 1,
              q2: value 2  
          },
        };
现在我在formValues中有了q3,这是一个值数组。当我尝试按下如下所示的值时

let q3 = e.target.name,
    arrayValues = [1,2,3]
formValues[q3].push(arrayValues)
我在提交数据时遇到以下错误

未捕获错误:在调度之间检测到状态突变


将数据推送到数组中似乎有问题。您知道如何解决此问题吗?

您需要创建一个副本,并使用
setState
更新状态,而不是使用
push
直接进行状态突变

this.setState(prevState => ({
  formValues: {
    ...prevState.formValues,
    [q3]: prevState.formValues[q3].concat(arrayValues),
  },
}));

假设您始终希望推送到阵列,例如在您的用例中:

const{formValues}=this.state
常量数组值=[1,2,4]
const newFormValues={…formValues,q3:[…formValues[q3],arrayValues]}
this.setState({formValues:newFormValues})
但如果直接控制q3的值,效果会更好:

const{formValues}=this.state
常量数组值=[1,2,4]
const newFormValues={…formValues,q3:arrayValues}
this.setState({formValues:newFormValues})