react原理解析之虚拟DOM+JSX

252 阅读2分钟

虚拟dom

什么是Virtual DOM?

Virtual DOM是一种编程概念,在这个概念里,UI以一种理想化的,或者说“虚拟的”表现形式被保存在内存中,并通知reactDom等类库使之与“真实的”DOM同步,这一过程就叫协调。 这种方式赋予了react声明式的API:您告诉React希望让UI是什么状态,React就确保DOM匹配该状态。
这使你可以从属性操作、事件处理和手动DOM更新这些在构建应用程序时必要的操作释放出来。

Shadow Dom和Virtual Dom是否是一回事?

他们不一样。
Shadow Dom是一种浏览器技术,主要用于在web组件中封装变量和css。
Virtual Dom则是一种由Javascript类库基于浏览器api实现的概念。

什么是“React Fiber”

Fiber是React16中新的协调引擎。
主要目的是使Virtual Dom可以进行增量式渲染。

DOM操作很慢,轻微的操作都可能导致页面重新排版,非常耗性能?

相对于DOM对象,js对象处理起来更快,而且更简单。通过diff算法对比新旧vdom之间的差异,可以批量的、最小化的执行dom操作,从而提高性能。

在哪里?

React中用JSX语法描述视图,通过babel-loader转译后它们变为React.createElement(...)形 式,
该函数将生成vdom来描述真实dom。
将来如果状态变化,vdom将作出相应变化,再通过diff算法 对比新老vdom区别从而做出最终dom操作。

JSX

什么是JSX

  • 是个语法糖。
  • React 使用 JSX 来替代常规的 JavaScript。
  • JSX 是一个看起来很像 XML 的 JavaScript 语法扩展。

为什么需要JSX

  • 开发效率:使用 JSX 编写模板简单快速。
  • 执行效率:JSX编译为 JavaScript 代码后进行了优化,执行更快。
  • 类型安全:在编译过程中就能发现错误。

原理

React 16原理:babel-loader会预编译JSX为React.createElement(...) 。

React 17原理:React 17中的 JSX 转换不会将 JSX 转换为 React.createElement,而是自动从 React 的 package 中引入新的入口函数并调用。另外此次升级不会改变 JSX 语法,旧的 JSX 转换 也将继续工作。

与Vue的区别

  • react中虚拟dom+jsx的设计一开始就有,vue则是演进过程中才出现的。

  • jsx本来就是js扩展,转义过程简单直接的多;vue把template编译为render函数的过程需要

  • 复杂的编译器转换字符串-ast-js函数字符串。