網(wǎng)站首頁 編程語言 正文
react
- 提供定義 react 組件(
ReactElement
)的必要函數(shù), 一般來說需要和渲染器(react-dom
,react-native
)一同使用. 在編寫react應(yīng)用的代碼時(shí), 大部分都是調(diào)用此包的 api.如React.Component - 開發(fā)時(shí)使用的絕大部分api
- class 組件中使用setState()
- function 組件里面使用 hook,并發(fā)起dispatchAction去改變 hook 對(duì)象
- 改變 context(其實(shí)也需要setState或dispatchAction的輔助才能改變)
react-dom
- 是 react 與 web 平臺(tái)連接的橋梁(可以在瀏覽器和 nodejs 環(huán)境中使用), 將react-reconciler中的運(yùn)行結(jié)果輸出到 web 界面上. 在編寫react應(yīng)用的代碼時(shí),大多數(shù)場景下, 能用到此包的就是一個(gè)入口函數(shù)
ReactDOM.render(
,document.getElementByID(‘root’))
, 其余使用的 api, 基本是react包提供的. - 引導(dǎo)react應(yīng)用的啟動(dòng)(通過ReactDOM.render).
- 能夠?qū)eact-reconciler包構(gòu)造出來的fiber樹表現(xiàn)出來, 生成 dom 節(jié)點(diǎn)(瀏覽器中), 生成字符串(ssr)
react-reconciler
- 綜合協(xié)調(diào)
react-dom
,react
,scheduler
各包之間的調(diào)用與配合,管理 react 應(yīng)用狀態(tài)的輸入和結(jié)果的輸出. 將輸入信號(hào)最終轉(zhuǎn)換成輸出信號(hào)傳遞給渲染器 - 接收react-dom包(初次render)和react包(后續(xù)更新setState)發(fā)起的更新請(qǐng)求.
- 將fiber樹的構(gòu)造過程包裝在一個(gè)回調(diào)函數(shù)中, 并將此回調(diào)函數(shù)傳入到scheduler包等待調(diào)度.
具體流程:
- 接受輸入(schedulerUpdateOnFiber), 將fiber樹生成邏輯封裝到一個(gè)回調(diào)函數(shù)中(涉及fiber樹形結(jié)構(gòu), fiber.updateQueue隊(duì)列, 調(diào)和算法等)
- 把此回調(diào)函數(shù)(
performSyncWorkOnRoot
或performConcurrentWorkOnRoot
)送入scheduler進(jìn)行調(diào)度 - scheduler會(huì)控制回調(diào)函數(shù)執(zhí)行的時(shí)機(jī), 回調(diào)函數(shù)執(zhí)行完成后得到全新的 fiber 樹
- 再調(diào)用渲染器(如react-dom, react-native等)將 fiber 樹形結(jié)構(gòu)最終反映到界面上
scheduler
- 調(diào)度機(jī)制的核心實(shí)現(xiàn), 控制由react-reconciler送入的回調(diào)函數(shù)的執(zhí)行時(shí)機(jī), 在concurrent模式下可以實(shí)現(xiàn)任務(wù)分片.
- 在內(nèi)部維護(hù)一個(gè)任務(wù)隊(duì)列, 優(yōu)先級(jí)高的排在最前面
- 循環(huán)消費(fèi)任務(wù)隊(duì)列, 直到隊(duì)列清空.
整體工作邏輯(不一定正確)
- 從updateContainer開始,根據(jù)scheduler進(jìn)行任務(wù)調(diào)度,展開后面流程
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_43294560/article/details/123450497
相關(guān)推薦
- 2022-07-14 python輸出小數(shù)精度控制的方法_python
- 2022-07-06 C語言深入探究自定義類型之結(jié)構(gòu)體與枚舉及聯(lián)合_C 語言
- 2022-08-31 C語言詳解實(shí)現(xiàn)猜數(shù)字游戲步驟_C 語言
- 2022-05-18 python?安全地刪除列表元素的方法_python
- 2024-03-18 bootstrap application 和 nacos 中配置文件的優(yōu)先級(jí)
- 2022-05-03 基于R語言?數(shù)據(jù)檢驗(yàn)詳解_R語言
- 2022-10-22 Python常用工具類之a(chǎn)dbtool示例代碼_python
- 2022-09-13 Nginx如何限制IP訪問只允許特定域名訪問_nginx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支