创建React状态数组的浅表副本并修改该浅表副本是否安全?

时间:2018-09-26 05:21:24

标签: javascript reactjs

一段时间以来,我一直在对状态的浅表副本(即React中的数组)进行调整,然后像这样设置状态。

...
this.state = {
    "exampleArr": [1]
}

...
someFunction(){
    let copyArr = this.state.exampleArr;
    copyArr.push(2);

    this.setState({
         "exampleArr": copyArr
    });
}

我知道在React文档中,他们说将状态视为不可变,并且仅使用setState()对其进行更改。有一阵子,我认为我的做法是正确的,因为它行之有效,没有任何问题。但是,最近我想到,我所做的就是制作状态的浅表副本,并调整该浅表副本,从技术上讲,它也会影响原始状态。

我在做错/危险吗?例如,我是否应该在每次需要调整数组时对其进行深拷贝,例如:

...
    someFunction(){
        let copyArr = this.state.exampleArr.map(x => x);
        copyArr.push(2);

        this.setState({
             "exampleArr": copyArr
        });
    }

或者对于数组的React状态真的不重要吗?

1 个答案:

答案 0 :(得分:1)

对于此示例,这实际上不是问题,您可能希望对复杂的对象更加具体,而不是简单的数组:)

只要它能正常工作:P您可以阅读一些有关堆栈主题的讨论以及查看文档,大多数讨论都涉及更实质的状态:

ES6 React - What are the difference between reference, shallow copy and deep copy and how to compare them?