更新数据
数据更新不直接修改,而是使用副本
撤销和恢复功能在开发中是一个很常见的需求,不直接在数据上修改可以让我们追溯并复用游戏的历史记录。
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官网数据处理文档)
- 简化复杂的功能,不可变性使得复杂的特性更容易实现。
- 跟踪数据的改变
- 如果直接修改数据,那么就很难跟踪到数据的改变(复杂)。跟踪数据的改变需要可变对象可以与改变之前的版本进行对比,这样整个对象树都需要被遍历一次。
- 跟踪不可变数据的变化相对来说就容易多了。如果发现对象变成了一个新对象,那么我们就可以说对象发生改变了。