Skip to main content

更新数据

数据更新不直接修改,而是使用副本

撤销和恢复功能在开发中是一个很常见的需求,不直接在数据上修改可以让我们追溯并复用游戏的历史记录。

const player = {score: 1, name: 'Jeff'};

player.score = 2;
// player 修改后的值为 {score: 2, name: 'Jeff'}

如果直接在数据上修改,我们能记录的只是 player.score进行了更新,而无法记录对应是哪个player

let player = { age: 18, name: 'ccvb' };

let newPlayer = { ...player, name: 'gg' };

// 直接替换时,可以将旧数据进行完整的备份和记录
player = newPlayer

完整的进行数据替换,可以将老数据保留下来作为旧数据的历史记录,能处理复杂结构的数据,降低跟踪数据的复杂性

****(摘自React官网数据处理文档)

  • 简化复杂的功能,不可变性使得复杂的特性更容易实现。
  • 跟踪数据的改变
    • 如果直接修改数据,那么就很难跟踪到数据的改变(复杂)。跟踪数据的改变需要可变对象可以与改变之前的版本进行对比,这样整个对象树都需要被遍历一次。
    • 跟踪不可变数据的变化相对来说就容易多了。如果发现对象变成了一个新对象,那么我们就可以说对象发生改变了。