react 原理

vdom 和 diff


React、Vue 区别

  • 相同点: 支持组件化,数据驱动视图,使用vdom
  • 不同点:React使用jsxVue模板拥抱htmlReact函数时编程,Vue声明式编程

模板编译 JSX

  • JSX 等同于 Vue 模板, Vue 模板不是 html, JSX 不是 JS
  • JSX 被编译成 React.createElement() 对象即 h / render 函数,执行返回 vNode
const elem = <div><p>text</p></div>

参数:tag(标签)、props(属性)、children(子集)

var elem = React.createElement("div",null,React.createElement("p",null,"text"))

合成事件

在这里插入图片描述

  • 在 react 16 之后,事件顶层为 root,react 16 为 document
  • 为什么使用合成事件机制:兼容和跨平台,挂载到顶层减少内存消耗,避免频繁解绑
  • 方便事件的统一管理(如transaction事务机制)

setState、batchUpdate

  • setState 16 / 17 版本为异步,dom事件和定时器为同步,18 版本皆为异步
  • 函数式不会合并多次 setState

在这里插入图片描述

  • 以上图示:如果命中异步(既命中 batchUpdate 事件机制 )会从左边执行,同步会从右边执行
  • 异步流程:当执行 setState 时,内部会定义 isBatchingUpdates = true,类似于开关,执行完毕为 false
  • 如图所示:定时器为回调异步(事件循环机制)

在这里插入图片描述
在这里插入图片描述


transaction 事务机制

以上在执行 increasse 函数,会先执行 initalize ,再执行函数本身,最后执行 close ,此为事务机制;
如图所示:

在这里插入图片描述
简单使用伪代码理解:

transaction.initalize = function(){}
transaction.close = function(){}
function method(){}
transaction.perform(method)

组件渲染和更新过程

  • 渲染过程:render() 生成 vnode —> patch(elem, vnode)
  • setState(newState) ----> dirtyComponents —> render() 生成 newVnode ----> patch(vnode, newVnode)
  • React 中的 patch 可拆分为两个阶段:reconciliation 阶段(执行 diff 算法,纯计算),commit 阶段(将 diff 结果渲染)
  • reconciliation:渲染一个 React 应用程序时,一个描述应用程序的节点树被生成并保存在内存中,然后将该树刷新到渲染环境,当应用程序更新时(通常为 setState),会生成一棵新树,新树与之前的树进行比较,以计算更新渲染应用程序所需的操作
  • commitreact fiberreact内部运行机制):将reconciliation阶段任务拆分,DOM需要渲染时暂停空闲时恢复即window.requestIdleCallback
Vue-React组件库的实现原理主要是通过将Vue组件转化为React组件,或将React组件转化为Vue组件,从而实现在Vue和React项目中同时使用的目的。 具体来说,Vue-React组件库的实现原理有以下几种方式: 1. 使用Vue-React转换器:Vue-React转换器是一个将Vue组件转换为React组件的工具,可以实现在React项目中使用Vue组件。转换器的实现原理是将Vue组件的模板转换为React组件的JSX语法,再在React项目中引入转换后的React组件。这种方式需要注意Vue组件的语法和React组件的语法差异,以及转换器的兼容性和性能问题。 2. 使用Vue-React组件库:Vue-React组件库是一个同时支持Vue和React的UI组件库,可以直接在Vue和React项目中使用。组件库的实现原理是针对Vue和React两种框架分别提供了组件的实现,通过封装和兼容处理,实现在两种框架中的使用。这种方式需要注意组件的兼容性和性能问题,以及组件库的选择和使用方法。 3. 使用Web Components:Web Components是一种通用的组件规范,可以在各种前端框架中使用。Vue和React都支持Web Components规范,因此可以使用Web Components实现在两种框架中共享组件。这种方式需要注意组件的规范和兼容性问题,以及Web Components的使用方法和浏览器支持情况。 需要注意的是,使用Vue-React组件库的方式相对简单,而且在实现原理上比较清晰,因此在实际开发中比较常用。但是,不同的Vue-React组件库实现方式略有不同,需要根据具体组件库的文档进行使用和配置。同时,也需要注意不同框架之间的差异和兼容性问题,避免出现不可预期的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值