学习笔记
为什么不变性很重要
请注意在 handleClick
中,你调用了 .slice()
来创建 squares
数组的副本而不是修改现有数组。为了解释原因,我们需要讨论不变性以及为什么学习不变性很重要。
通常有两种更改数据的方法。第一种方法是通过直接更改数据的值来改变数据。第二种方法是使用具有所需变化的新副本替换数据。如果你改变 squares
数组,它会是这样的:
1 | const squares = [null, null, null, null, null, null, null, null, null]; |
如果你在不改变 squares
数组的情况下更改数据,它会是这样的:
1 | const squares = [null, null, null, null, null, null, null, null, null]; |
结果是一样的,但通过不直接改变(改变底层数据),你可以获得几个好处。
不变性使复杂的功能更容易实现。在本教程的后面,你将实现一个“时间旅行”功能,让你回顾游戏的历史并“跳回”到过去的动作。此功能并非特定于游戏——撤消和重做某些操作的能力是应用程序的常见要求。避免数据直接突变可以让你保持以前版本的数据完好无损,并在以后重用它们。
不变性还有另一个好处。默认情况下,当父组件的 state 发生变化时,所有子组件都会自动重新渲染。这甚至包括未受变化影响的子组件。尽管重新渲染本身不会引起用户注意(你不应该主动尝试避免它!),但出于性能原因,你可能希望跳过重新渲染显然不受其影响的树的一部分。不变性使得组件比较其数据是否已更改的成本非常低。你可以在 memo API 参考 中了解更多关于 React 如何选择何时重新渲染组件的信息。
- Title: 学习笔记
- Author: gaoyanchen
- Created at : 2024-09-13 19:07:05
- Updated at : 2024-09-21 15:58:18
- Link: https://gyc.660624.xyz/2024/09/13/学习笔记/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments