【React】原理

笔记来源:小满zs

虚拟 DOM

在这里插入图片描述

// react.js
// jsx => babel | swc => React.createElement
const React = {
    createElement(type, props, ...children) {
        return {
            type,
            props: {
                ...props,
                children: children.map(child => typeof child === 'object' ? child : React.createTextElement(child))
            }
        }
    },
    createTextElement(text) {
        return {
            type: 'TEXT_ELEMENT',
            props: {
                nodeValue: text,
                children: []
            }
        }
    },
}

// 测试 vDOM
const vDOM = React.createElement('div', { id: 'foo' }, React.createElement('span', null, 'bar'))
console.log("=>(react.js:24) vDOM", vDOM);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="root"></div>
<script src="./react.js"></script>
</body>
</html>

在这里插入图片描述

任务切片

浏览器一帧为60FPS,也就是16ms(1000毫秒/60帧≈16.67毫秒)。

浏览器一帧完成的任务:

  1. 处理事件的回调click.…事件
  2. 处理计时器的回调
  3. 开始帧
  4. 执行 requestAnimationFrame 动画的回调
  5. 计算机页面布局计算(DOM)合并到主线程
  6. 绘制
  7. 如果此时还有空闲时间,执行 requestldleCallback(React 使用了该函数的思想,React 自己又实现了 requestldleCallback)
// 完成虚拟 DOM 转 fiber 结构和时间切片
let nextUnitOfWork = null
function workLoop(deadline) {
    let shouldYield = false
    while (nextUnitOfWork && !shouldYield) {
        nextUnitOfWork = performUnitOfWork(nextUnitOfWork)
        shouldYield = deadline.timeRemaining() < 1
    }
    requestIdleCallback(workLoop)
}

requestIdleCallback(workLoop) 

function performUnitOfWork() {

}

对任务切片可以简单理解为 将所有的任务分成一个一个小任务,这里小任务函数都放在 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
发出的红包

打赏作者

秀秀_heo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值