如何获得状态值并对其进行操作而又不改变状态本身以做出反应?

时间:2018-11-11 13:18:28

标签: reactjs react-native

我正在使用本机开发一个应用程序。我在状态中有一个对象数组(lettersPosition),我想在函数中的变量中对它进行临时排序(但我不希望对状态本身进行排序):

verifyWord = () => {
    const array = this.state.lettersPosition;       
    array.sort(function (a, b) {
        return a.x - b.x;
    });
    var word = "";
    array.map(function (char) {
        word += char.letter
    })
}

我对其进行了测试,似乎我的状态本身在排序后已更新(即使我在temp数组上调用了sort函数)。

就像'array'变量包含对状态的整个引用,而不仅仅是其值一样。如果我修改该变量,它也会修改状态。

反应正常吗?

如何仅获取状态值并操纵状态值而不更改状态本身?

谢谢

3 个答案:

答案 0 :(得分:0)

尝试使用var newArray = oldArray.slice();而不是const array = this.state.lettersPosition;在您的代码中,您没有创建数组的副本,只是将其分配给另一个变量。

有关var newArray = oldArray.slice();的更多信息,请参见Copy array by value

答案 1 :(得分:0)

使用Array.from()。它会创建一个浅表副本。

const sortedArray = Array.from(this.state.lettersPosition);
...etc

答案 2 :(得分:0)

您也可以使用扩展运算符。

var a = [1, 2, 3, 4, 5]
var b = [...a]