首页 > 技术文章 > 9 react 基础 - 虚拟DOM

zonehoo 2019-10-08 18:56 原文

一.虚拟DOM

  React 原理

  1. 存放 state 数据

  2. JSX 模版

  3. 数据 + 模版 生成虚拟DOM(虚拟DOM就是一个JS 对象, 用来描述真实DOM)

  eg: ['div', {id:'abc'}, ['span', {}, 'hello world']]

  4. 用虚拟DOM的结构生成真实的DOM, 来显示

  eg: <div id='abc'><span>hello word</span></div>

  5. state 发生变化

  eg: <div id='abc'><span>bye bye</span></div>

  6. 数据 + 模版 结合生成 虚拟DOM(虚拟DOM就是一个JS 对象, 用来描述真实DOM)

  eg: ['div', {id:'abc'}, ['span', {}, 'bye bye']]

  7. 比较原始虚拟DOM 和 新的虚拟DOM 的区别, 找到区别的span内容

  8. 直接操作DOM, 改变 span 中的内容

 

二. 深入了解虚拟DOM

  render 方法内

    返回 JSX 语法 与 返回 React.createElement() 方法所生成的效果是一样的

    eg: 下面两种产生的效果相同

      JSX:

        return <div><span>div span</span></div>

      React.createElement:

        return React.createElement('div', {}, React.createElement('span', {}, 'div span'))

  虚拟DOM 可以理解为

    将 JSX  转化为  createElement 对象  再转化为  虚拟DOM(js 对象)  再转化为 真实的DOM

  虚拟DOM 带来的好处

    1.性能提升 (DOM 比对 编程 js 比对)

    2.他使得跨端应用得以实现 (React Native, 再网页中 将虚拟 DOM 转化为组件,再App中将 虚拟DOM 转化为 app 组件, 使得 React 开发变得简介)

 

三. 虚拟DOM 中的 Diff (diffrence) 算法  (虚拟 DOM 的 比对方式)

  调用 setState 时 会运行 Diff 算法

  同级比较

    先比较顶层 DOM

      如果 顶层有差异 (替换全部的DOM)

  使用 稳定的 key 值 做 标记 便于 虚拟DOM 比对

推荐阅读