Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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 道具阵列是否需要深度复制?_Javascript_Reactjs - Fatal编程技术网

Javascript 道具阵列是否需要深度复制?

Javascript 道具阵列是否需要深度复制?,javascript,reactjs,Javascript,Reactjs,我刚刚开始接触React和JS,正在尝试学习如何以及何时复制。道具是不可变的,但由于某些原因,当从道具分配数组时,我没有遇到任何问题。另外,我知道复制数组很浅,但当我将1个数组赋给状态中的两个变量时,1不会改变另一个变量。我遗漏了什么?但是当我将一个数组分配给状态中的两个变量时,1不会改变另一个 从同一数组创建两个javascript变量不会使它们绑定在一起。例如: this.state = { a: 'foo', b: 'foo2',

我刚刚开始接触React和JS,正在尝试学习如何以及何时复制。道具是不可变的,但由于某些原因,当从道具分配数组时,我没有遇到任何问题。另外,我知道复制数组很浅,但当我将1个数组赋给状态中的两个变量时,1不会改变另一个变量。我遗漏了什么?

但是当我将一个数组分配给状态中的两个变量时,1不会改变另一个

从同一数组创建两个javascript变量不会使它们绑定在一起。例如:

this.state = { a: 'foo',
               b: 'foo2',
               c: 'foo3'
             }
console.log('This is b: '+this.state.b); // => 'This is b: foo2'
console.log('This is c: '+this.state.c); // => 'This is c: foo3'

this.setState({ b: 'bar' })
console.log('This is new b: '+b); // => 'This is new b: bar'
console.log('c doesnt change: '+c); // => 'c doesnt change: foo3'

另外,更改
a
的值不会更改
b
c
的值。如果您想同时更新
b
c
的状态,则需要分别进行更新。

“但由于某些原因,在从道具分配阵列时,我没有遇到任何问题”您的意思是什么?您是说状态硬拷贝阵列?是的。除非运行
setState
,否则更改阵列不会更改状态。