美文网首页
不可变性

不可变性

作者: 郑馋师 | 来源:发表于2020-02-12 21:26 被阅读0次

不可变性

一般来说,有两种改变数据的方式。第一种方式是直接修改变量的值,第二种方式是使用新的一份数据替换旧数据。

直接修改数据

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

新数据替换旧数据

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

var newPlayer = Object.assign({}, player, {score: 2});
// player 的值没有改变, 但是 newPlayer 的值是 {score: 2, name: 'Jeff'}

// 使用对象展开语法,就可以写成:
// var newPlayer = {...player, score: 2};

不直接修改(或改变底层数据)这种方式和前一种方式的结果是一样的,这种方式有以下几点好处:

简化复杂的功能

不可变性使得复杂的特性更容易实现。在后面的章节里,我们会实现一种叫做“时间旅行”的功能。“时间旅行”可以使我们回顾井字棋的历史步骤,并且可以“跳回”之前的步骤。这个功能并不是只有游戏才会用到——撤销和恢复功能在开发中是一个很常见的需求。不直接在数据上修改可以让我们追溯并复用游戏的历史记录。

跟踪数据的改变

如果直接修改数据,那么就很难跟踪到数据的改变。跟踪数据的改变需要可变对象可以与之改变之前的版本进行对比,这样整个对象树都需要被遍历一次。

跟踪不可变数据的变化相对来说就容易多了。如果发现对象变成了一个新对象,那么我们就可以说对象发生改变了。

确定在 React 中何时重新渲染

不可变性最主要的优势在于它可以帮助我们在 React 中创建 pure components。我们可以很轻松的确定不可变数据是否发生了改变,从而确定何时对组件进行重新渲染。

如果想要了解更多,可以去查阅react官网性能优化章节,以了解更多有关 shouldComponentUpdate() 函数及如何构建 pure components 的内容。

相关文章

  • python的“不可变性”代表了什么?

    在python中,每一个对象都可以分为不可变性或者可变性。 不可变性可以用来保证在程序中保持一个对象的固定不变。 ...

  • 不可变性

    可以通过创建一个不可变的共享对象来保证对象被多个线程共享时不会被修改(通俗点讲就是,不提供修改方法) 注意不可变性...

  • 不可变性

    不可变性 一般来说,有两种改变数据的方式。第一种方式是直接修改变量的值,第二种方式是使用新的一份数据替换旧数据。 ...

  • 可变性和不可变性

  • Swift字符串的常见操作

    字符串的可变性 var 指定的可修改 let 指定的不可修改 对比 OC 的可变字符串和不可变字符串字符串的可变性...

  • 面试题汇总

    1. String, StringBuffer and StringBuilder 可变性String 不可变St...

  • String不可变性

    1、什么是不可变 不可变对象是指对象在初始化后,在它的整个生命周期里,都是不可以被改变的。 2、为什么String...

  • Java(二)Java基础--03String

    一、字符串的不可变性 图解Java字符串的不变性 二、JDK 6 和 JDK 7 中 substring 的原理及...

  • 什么是 String 的不可变性?

    String 被声明为 final,是不可变的,它也不可被继承。 通过源码了解 String 的不可变性 在 Ja...

  • Java基础与框架

    1.String、StringBuffer、StringBuilder的区别? 可变性:String不可变(字符串...

网友评论

      本文标题:不可变性

      本文链接:https://www.haomeiwen.com/subject/zdchfhtx.html