日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

react底層的四大核心內(nèi)容架構(gòu)詳解_React

作者:神奇大叔 ? 更新時(shí)間: 2022-05-15 編程語言

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ù)(performSyncWorkOnRootperformConcurrentWorkOnRoot)送入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

欄目分類
最近更新