React18原理: 核心包结构与两大工作循环

2024-02-13 23:36

本文主要是介绍React18原理: 核心包结构与两大工作循环,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

React核心包结构


1 ) react

  • react基础包,只提供定义 react组件(ReactElement)的必要函数
  • 一般来说需要和渲染器(react-dom,react-native)一同使用
  • 在编写react应用的代码时, 大部分都是调用此包的api
  • 比如, 我们定义组件的时候,就是它提供的
    class Demo extends React.Component {render() {return <h1>Hello</h1>}
    }
    

2 ) react-dom

  • react渲染器之一,是react与web平台连接的桥梁(可以在浏览器和nodejs环境中使用)
  • 因为react它不仅可以在浏览器中进行渲染,比如说react-native,它可以去渲染移动端的一些内容
  • react-dom 是在浏览器的环境中提供的渲染器
  • react-dom 的作用
    • 将 react-reconciler 中的运行结果输出到web界面上
  • 在编写react应用的代码时,大多数场景下,能用到此包的就是一个入口函数
    • ReactDOM.render(<App/>, document.getElementById('root')
  • 其余使用的api, 基本是react包提供的

3 ) react-reconciler

  • react得以运行的核心包(综合协调react-dom,react,schedu1er各包之间的调用与配合)
  • 管理react应用状态的输入和结果的输出
  • 将输入信号最终转换成输出信号传递给渲染器
    • 接受输入(scheduleUpdateOnFiber), 将fiber树生成逻辑封装到一个回调函数中(涉及fiber树形结构,fiber.updateQueue列,调和算法等)
    • 把此回调函数(performSyncWorkOnRoot或performConcurrentWorkOnRoot)送入scheduler进行调度
    • scheduler会控制回调函数执行的时机,回调函数执行完成后得到全新的fiber树
  • 再调用渲染器(如react-dom,react-native等)将fiber树形结构最终反映到界面上
  • 总结而言,react-reconciler 这个包它的核心是生成任务,这个生成任务是基于fiber的

4 ) scheduler

  • scheduler时调度器, 实际上它的核心就是react的fiber架构下的时间分片
  • 最核心的作用,就是对这个时间分片上面的一个管理,如何去执行我们的这个分片的任务
  • 调度机制的核心实现,控制由react-reconciler送入的回调函数的执行时机
  • 在 ConCurrent 模式下可以实现任务分片
  • 在编写react应用的代码时,几乎不会直接用到此包提供的api.
  • 核心任务就是执行回调(回调函数由react-reconciler提供)
  • 通过控制回调函数的执行时机,来达到任务分片的目的,实现可中断渲染(ConCurrent模式下才有此特性)
  • 所以,scheduler 它是决定执行什么任务,什么任务先执行,而 生成任务和执行任务都是 react-reconciler 来做的

React工作循环

  • react中的工作循环,这是它的一个最顶层的一个流程图,在这张图里面,有两个核心的大循环
  • 第一大循环是 react-reconciler 提供的,它的核心是构建fiber树,生成任务
  • 第二大循环是 scheduler 提供的, 它的核心是任务调度(处理任务的优先级)
  • react的原理实际上就是两大工作循环

这篇关于React18原理: 核心包结构与两大工作循环的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706929

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带