反应常数变化值?

时间:2018-02-09 11:59:56

标签: javascript reactjs const

怎么可能,我正在创建一个const来从我的聊天中获取旧消息,所以我可以知道是否有来自数据库的新消息或类似的东西,但是我的代码有些奇怪, const正在改变价值

const oldMessages = this.state.messages.slice();

// Console
console.log(oldMessages[oldMessages.length - 1]);
// Prints {name: "André", message: "asds", who: "Y", sending: true, local_key: 232, …}

newMessages.map((message, key) => {
    // Here I don't even call the const
    if (message.local_key != undefined) {
        const i = messages.map((i) => {
            return i.local_key
        }).indexOf(message.local_key);
        if (i >= 0) {
            // messages.splice(i, 1);
            messages[i].id = message.id;
            messages[i].sending = false;
            messages[i].local_key = null;
            newMessages.splice(key, 1);
            //
            // Limpar chave do banco
            //
        } else {
            newMessages[key].local_key = null;
        }
    }
    if (newMessages[key] != undefined) {
        newMessages[key].animate = true;
    }
});

// Console
console.log(oldMessages[oldMessages.length - 1]);
// Prints {name: "André", message: "asds", who: "Y", sending: false, local_key: null, …}

你可以看到,我甚至没有调用变量,除了控制台

与参考有关吗?

PS:messages也是this.state.messages的引用

2 个答案:

答案 0 :(得分:2)

const并没有按照您的想法行事。

const阻止重新分配变量:

const arr = []; 

arr.push(1); // works

console.log(arr); // [1]

arr = []; // whoops

答案 1 :(得分:2)

关于const的一件事是

  

常量是块作用域的,就像使用let定义的变量一样   声明。常数的值不能改变   重新分配,不能重新声明。

在你的情况下,你不是重新分配const变量,而是改变它可能的原始值

您要查找的是Immutable数据,该数据不会更改其值,但会创建原始数据的新引用并对其进行更新。查看诸如Immutable-JS

之类的库