進階React

hoc, render porps, hooks 的對比和用處

  1. 都是react解決狀態(tài)共享和邏輯復用的方法
  2. hooks 是16.8后推出的,不用嵌套,不用修改組件層級,簡單易用

虛擬dom是什么

  • 什么是vdom?
    vdom是用js對象來描述真實dom 結構,是對真實dom的映射
  • 有什么用?
    操作真實dom 是耗性能的,vdom用來減少dom的操作,是對渲染的抽象,可以用于多端
  • 怎么用?
    每次修改狀態(tài), 組件會生成新的vdom,新舊vdom進行diff算法對比,最終生成新的vdom, 視圖更新

diff算法?

新舊vdom tree對比
遵循三個原則

  • 同層對比
    將傳統(tǒng)的樹節(jié)點的對比的時間復雜度從o(n^3)降為o(n)
  • 對比父節(jié)點的tag, type
    如果不是相同的父節(jié)點,則銷毀重建
  • 同層子節(jié)點使用key標記,來進行匹配復用
    子節(jié)點上標記唯一的key, 根據key來匹配相同的子節(jié)點,進行位移復用,若無匹配,則新建,若匹配完成后,舊節(jié)點還有剩余子節(jié)點,則銷毀

jsx原理

實際調用了react.createElement(type, props, ...children)
用來生成vnode
createElement根據type,如果是class,則createComponent, 繼承copponent,合并配置,生成vnode

自定義的react組件為何必須大寫

用來區(qū)別原生標簽,便于瀏覽器識別解析
babel在編譯過程中判讀組件的首字母,如果小寫則為原生dom標簽,編譯為字符串,如果大寫則判讀為自定義組件,編譯為組件

setState是同步還是異步?

這里的異步不是指異步代碼實現,指的是先收集變更,放入隊列中,然后統(tǒng)一進行批量更新

  • 異步 合成事件和鉤子函數中
    調用this.updater.enqueue
    就是將回調事件放到updteQueue中,
    判斷isbathupdates 是否批量更新
    bathupdates 通過 transcation(事務)機制來完成
    事務機制類似一個黑盒子,在開始和結束階段來添加邏輯
    init中初始化updatequeue,
    setstate將事件放入updatequeue中
    close階段將updatequeue進行flush
    ---- vue通過js eventloop實現
  • 同步
    放在setTimeout中活著原生dom通過addeventListener綁定的事件中

react 如何實現自己的事件機制?

  • 注冊事件 事件依賴關聯, 形成map
  • 合成事件 綁定事件 document.addEventlister, 收集事件回調函數
  • 觸發(fā)事件 dispatchEvent, 內部模擬了事件觸發(fā)
    動畫淺析REACT事件系統(tǒng)和源碼

聊聊fiber架構

為什么引入?
渲染線程和js引擎線程互斥
15及以前版本渲染采用同步,碰到嵌套過深或渲染耗時的組件,頁面會卡頓阻塞,用戶體驗差
fiber架構,讓渲染有優(yōu)先級,可中斷,
利用時間片的概念,每個任務上攜帶expirestime(過期時間),通過expirestime 對比判斷任務的優(yōu)先級,如何碰到優(yōu)先級高的任務,組件暫停渲染,將執(zhí)行棧交給優(yōu)先級高的任務先執(zhí)行,執(zhí)行完后,在暫停渲染的組件處重新開始渲染,利用來瀏覽器api requesIdleCallback(利用瀏覽器空閑時間來處理任務)來實現

react事件中為什么要綁定this或者要用箭頭函數

this指向的問題
this指向不是定義時的環(huán)境,而是執(zhí)行時綁定環(huán)境,指向underfind(嚴格模式下)
綁定this指向組件實列
constructor中 bind this, 只操作一次
箭頭函數,每次都會重新生成

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 原教程內容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,931評論 1 18
  • React基礎 React組件化編程 Create React App 創(chuàng)建React 前端工程 題外話題:頁面性...
    BeautifulHao閱讀 1,632評論 0 3
  • 40、React 什么是React?React 是一個用于構建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,179評論 0 1
  • 以下內容是我在學習和研究React時,對React的特性、重點和注意事項的提取、精練和總結,可以做為React特性...
    科研者閱讀 8,396評論 2 21
  • 作為一個合格的開發(fā)者,不要只滿足于編寫了可以運行的代碼。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個周閱讀 8,664評論 1 33

友情鏈接更多精彩內容