怎么可能,我正在创建一个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
的引用
答案 0 :(得分:2)
const
并没有按照您的想法行事。
const
阻止重新分配变量:
const arr = [];
arr.push(1); // works
console.log(arr); // [1]
arr = []; // whoops
答案 1 :(得分:2)
关于const
的一件事是
常量是块作用域的,就像使用let定义的变量一样 声明。常数的值不能改变 重新分配,不能重新声明。
在你的情况下,你不是重新分配const变量,而是改变它可能的原始值
您要查找的是Immutable
数据,该数据不会更改其值,但会创建原始数据的新引用并对其进行更新。查看诸如Immutable-JS