type
status
date
slug
summary
tags
category
icon
password
案例演示
本节内容根据官方文档的 教程 (opens new window)编写。
案例代码
为什么不可变性在 React 中非常重要
案例中,在修改
state
时并非直接修改对象属性内的某个直,而是先使用.slice()
方法创建了数组的一个副本。然后在通过setState()
方法,替换掉整个数组。一般来说,有两种改变数据的方式。第一种方式是直接修改变量的值,第二种方式是使用新的一份数据替换旧数据。
直接修改数据
新数据替换旧数据
不直接修改(或改变底层数据)这种方式和前一种方式的结果是一样的,这种方式有以下几点好处:
简化复杂的功能
不可变性使得复杂的特性更容易实现。在后面的章节里,我们会实现一种叫做“时间旅行”的功能。“时间旅行”可以使我们回顾井字棋的历史步骤,并且可以“跳回”之前的步骤。这个功能并不是只有游戏才会用到——撤销和恢复功能在开发中是一个很常见的需求。不直接在数据上修改可以让我们追溯并复用游戏的历史记录。
跟踪数据的改变
如果直接修改数据,那么就很难跟踪到数据的改变。跟踪数据的改变需要可变对象可以与改变之前的版本进行对比,这样整个对象树都需要被遍历一次。
跟踪不可变数据的变化相对来说就容易多了。如果发现对象变成了一个新对象,那么我们就可以说对象发生改变了。
确定在 React 中何时重新渲染
不可变性最主要的优势在于它可以帮助我们在 React 中创建 pure components。我们可以很轻松的确定不可变数据是否发生了改变,从而确定何时对组件进行重新渲染。
查阅性能优化 (opens new window)章节,以了解更多有关
shouldComponentUpdate()
函数及如何构建 pure components 的内容。- 作者:慕雨
- 链接:https://www.axin.work/article/bbb468a6-d647-49aa-a964-cb614655806f
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。