React 中的虚拟DOM

React 的重新渲染,性能是很高的。因为它引入了虚拟DOM的概念。

呃,来看一下,render 函数渲染页面的几种做法。

前两步都是拿到state 数据 与 JSX模版。第一种就是比较朴素的方式。第二种方式虽然不用完全替换,但是也需要比对两个DOM。第三种是虚拟DOM方式。

虚拟DOM 本质上就是 js对象,因此在比对的时候操作js 对象比操作DOM 在性能上有很大的提升。

实际上,React 底层渲染的步骤是下面这样(上图中3,4颠倒一下顺序)

实际上JSX 与真实DOM 之间的关系是:

 JSX return 的模版,先转化为 虚拟DOM(JS对象),再会转化为真实的DOM。

下图两个return 的作用是一样的,React 底层正是使用createElement() 生成虚拟DOM,虚拟DOM再被生成真实DOM。

使用虚拟DOM的优点:

1. 性能提升了 (操作js对象比操作DOM要更效率高)

2. 它使得跨端应用得以实现。React Native

虚拟DOM 的 Diff 算法

上图,我们介绍React 渲染步骤时,第七步是比较原始虚拟DOM与新的虚拟DOM的区别

比对,React 底层使用了Diff算法。

什么时候会去做比对?当数据发生改变的时候。

数据改变,要么是state 数据要么是props数据,而子组件不可改变props数据,因此props 改变的时候也是state 改变的时候。

state 改变的话,使用的就是setState()函数。setState() 是一个异步函数(为了提升React底层性能)

如果说,连续调用三次setState,React 底层会把三次setState调用合并为一次setState调用。只做一次虚拟DOM的比对,然后更新一次DOM。

Diff 算法,同级比对

【注意】 在循环的时候,引入key 值,可以提升虚拟DOM的性能,因此key 的值尽量用稳定的值,不要使用会变的index。

猜你喜欢

转载自blog.csdn.net/purple_lumpy/article/details/86560245