我知道您可以使用传播运算符复制数组:
const itemsArr = [...this.state.itemsArr];
您可以解构作为对象键值的数组:
const { itemsArr } = this.state
有没有办法将它们组合为一个步骤?伪代码:
const { itemsArr } = [...this.state]
或
const { [...itemsArr] } = this.state
编辑:是否有一种方法可以将它们组合为一个步骤, 以避免两次输入“ itemsArr”?
答案 0 :(得分:1)
这可以通过从itemsArr
的副本中解散state
来完成:
const { itemsArr } = JSON.parse(JSON.stringify(this.state))
这样做的优点是您的嵌套对象被克隆,因此您的state.itemsArr
也被复制了,修改itemsArr
不会更改state
中的数组。
缺点是,如果您的state
对象包含函数,则使用此方法将无法访问它们,而且您可以质疑性能。
复制state
的另一种方法是使用Object.assign
:
const { itemsArr } = Object.assign({}, this.state)
使用此方法,您可以在state
内访问函数,但会进行浅表复制,因此不会克隆state.itemsArr
。
ECMAScript2018实际上具有一个可与JSON对象一起使用的散布运算符:
const { itemsArr } = { ...this.state }
https://codesandbox.io/s/32qvzjy2op(请查看浏览器的控制台,该工具中的控制台是错误的)。
但是再说一次,它只会复制一个浅表。
最好的方法是编写/导入一个deepCopy
函数,该函数将使用其嵌套的属性和函数克隆该对象。