React中的虚拟DOM
什么是虚拟DOM
- 为了提升性能,每次render只更新diff的dom,diff部分是使用js对象进行对比的,在js中创建对象对比与dom直接对比,相对来说js对象性能影响更加。
- 流程举例
- state数据
- render内使用JSX模版进行转换
- 将数据 与 模版结合(虚拟DOM就是一个js对象,用它来描述真实DOM)(损耗了性能)
['div', {'id': 'a'}, ['span', {}, 'hello world']]
- 用虚拟DOM的结构生成真实的DOM ,新DOM如下
<div id='a'><span>hello world</span></div>
- state 发生变化
- 数据 + 模版 生成新的虚拟DOM(极大的提升了性能)
['div', {'id': 'a'}, ['span', {}, 'hello Harris']]
- 比较原始虚拟DOM和新的虚拟DOM的区别,找到区别是span中的内容(极大的提升了性能)
- 直接操作dom,改变span中的内容
深入了解虚拟DOM
- 执行流程
JSX -> createElement -> 虚拟DOM(JS 对象) -> 真实的DOM
- 优点
- 性能提升了。
- 它使得跨端应用得以提升,React Native。
虚拟DOM中的Diff算法
- 同层比较
- 增加key值,使用key值进行比较,这也就是为什么在定义index时不建议使用map的index,建议使用value等唯一性较大的key