阿姨,React源碼好難懂,我不想努力了

来源:https://www.cnblogs.com/lyy-1/archive/2020/07/02/13224351.html
-Advertisement-
Play Games

應屆生:阿姨,我不想努力了在學校用React + antd做過後臺管理系統,熟悉React技術棧。兩年前端:公司技術棧是React,都用了一年了,我React賊六。五年前端:帶團隊把公司的糞坑項目用React重構了。React對我來說就跟呼吸一樣容易。:要不學學React源碼吧。......%……& ...


應屆生:阿姨,我不想努力了
在學校用React + antd做過後臺管理系統,熟悉React技術棧。
兩年前端:公司技術棧是React,都用了一年了,我React賊六。
五年前端:帶團隊把公司的糞坑項目用React重構了。React對我來說就跟呼吸一樣容易。
:要不學學React源碼吧。
......
%……&&……% ,怎麼這麼難懂,阿姨,我不想努力了。

明確學習目的
考慮下,你的學習目的是:

  1. 真的想學React源碼。
  2. 只想理解React的大體工作流程,瞭解一些經常被大佬們提起的名詞(比如Diff演算法Fiber架構時間切片),好和麵試官吹水。

如果是2,向你推薦一篇mini教程build-your-own-react,包教包會,誰用誰知道。同時你可以關閉這篇文章了。

如果是1,那我們接著往下看。

源碼為什麼難懂
你決定首先看看源碼的目錄
滿懷信心的打開facebook/react倉庫下的packages目錄,印入眼帘的是一屏翻不完的20+文件夾。
你聽說React的主要調度邏輯在react-reconciler目錄下,你輕點滑鼠,印入眼帘的大概有80+文件。
怎麼這麼多,阿姨,我不想努力了。
你聽別人說看源碼要從第一個commit看起
你翻頁翻斷了手指,終於找到13年的commit

這和現在的React(v16.13.1)差了10w個版本,早就重構三輪了。
怎麼變化這麼快,阿姨,我不想努力了。
你決定從ReactDOM.render開始debug
所有React應用都是通過ReactDOM.render創建的,那麼從入口一直debug到頁面更新不就是整個流程了麽。
你一步一步向下調試,一分鐘過去了,流程還沒走完。你發現流程里有很多非同步調用,連debug到哪了都不知道。
怎麼這麼複雜,阿姨,我不想努力了。
你決定找現成的教學
先搜搜免費的,一搜搜出一大堆。怎麼一來就是貼大段大段代碼。我就是不懂React是如何執行的,你上來就給我貼React內執行部的代碼?
再搜搜收費的,嗯,幾百大洋,為了學源碼,我忍。可是為什麼講的代碼和當前React版本差這麼多啊?
怎麼這麼難,阿姨,我不想努力了。

 

1 目前,我也組建了一個自學群,可以一起討論研究前端的各個事宜,以及提高能力的方法,只要你想瞭解前端,精通前端,都歡迎你們加入我們的前端自學。
2 你可以找到志同道合的朋友,相互激勵的學習伙伴,還能得到大神的經驗分享,和加入項目實戰的機會。這是我的WEB前端q裙。---851231348
3 整理了-套最新的前端基礎教程,學習前端的這個過程當中我也收集了很多前端學習手冊,面試題,開發工具,PDF文檔書籍教程,可以直接分享給你們。

其實,造成大家不想努力的原因可以歸結為兩點:

  1. 身份難轉換

框架使用者和框架開發者視角完全不同。
框架使用者主要關註業務實現,而框架開發者需要關註框架的設計理念如何落實。
問問自己,React的設計理念是什麼,你知道麽。

  1. 大量功能堆砌在流程中無法分離

即使你只想關註某個功能點(比如ReactDOM.render如何渲染頁面)。但大量功能實現的代碼也是耦合在這個流程中的,調試時很容易陷入源碼的汪洋大海。

源碼該怎麼懂

我們來分別看看兩個難點如何解決。

  1. 身份難轉換

讓我們站在框架開發者角度看看React的設計理念:
React 是用 JavaScript 構建快速響應的大型 Web 應用程式的首選方式。

那麼什麼樣的架構才能支撐“快速響應”呢?什麼樣的代碼才能實現這套架構呢?
發現了麽,從“理念”到“代碼”,有三層抽象遞減的過程。


這就是為什麼網上很多講React 代碼實現的教學讓人難以理解的原因 —— 你根本不懂這些代碼背後實現的意義。
所以你需要從“理念”出發,理解了架構是如何設計的,才能懂代碼為什麼這麼寫。

  1. 大量功能堆砌在流程中無法分離

如果有一本講解源碼的書,每次只關註一個功能的實現(比如useState如何更新DOMDiff演算法如何執行),同時沒有大段大段的源碼演示。每個功能再提供一個線上Demo讓我自己能調試一下這個功能實現的流程。
那想必是極好的。
能同時滿足1和2的教學有麽?
有,這就是React技術揭秘
免費麽?開源的,只求一個star。Github地址
本書的宗旨是打造一本嚴謹、易懂的React源碼分析教程。
為了達到這個目標,在行文上,本書會遵循:

  • 不預設觀點 —— 所有觀點來自React核心團隊成員在公開場合發表的內容。
  • 豐富的輔助資料 —— 包括線上Demo、文章視頻。
  • 代碼剪枝 —— 講解流程時只關註流程相關的代碼,省略額外功能的干擾。

保持更新 —— 在React版本更新後會及時補充。當前版本v16.13.1開發版

阿姨,我還能再努力一把!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 問題 當使用pdfjs來實現預覽功能的時候,遇到了2個問題: 一是帶寬占用過大,會下載整個pdf文件,這對部署在公網的應用來說,成本壓力很大,因為雲服務帶寬是很貴的。 二是記憶體占用過大,一個80M的pdf,在預覽時占用記憶體高達600M,在一些記憶體較小的手機上容易發生崩潰。 pdfjs預設配置下, ...
  • 1.圖片標簽 img src:圖片路徑 width:設置圖片的寬度,如果是單獨設置,則保存圖片比例進行修改,單位可以是px和% height:設置圖片的高度,如果是單獨設置,則保存圖片比例進行修改,單位可以是px和% title:滑鼠放在圖片上提示圖片名稱 alt:當圖片路徑有誤的時候用來提示 路徑 ...
  • 關於HTML中的 <!DOCTYPE> 聲明 今天在完成課程任務時,我的HTML代碼中一處出現了一個問題。 我現在有三張圖片,這三張圖片是從一張圖片無縫裁剪下來的,這三張圖片均等寬不等高,若使用PS可完美拼接回原圖。我在表格內,將此三張圖片放入,當瀏覽器運行時,我發現此三圖片並未完美緊密貼合,而是兩 ...
  • 元編程是一種強大的技術,使你能夠編寫可以創建其他程式的程式。ES6藉助代理和許多類似功能,使在JavaScript中利用元編程變得更加容易。ES6 Proxy(代理) 有助於重新定義對象的基本操作,從而為各種可能性打開了大門。 本指南可以幫助您理解為什麼ES6代理如此之好,尤其是對於元編程而言: 什 ...
  • 1.HTML的head標簽 head標簽中主要配置瀏覽器的配置信息 常用的配置信息: 1.網頁解析編碼格式 2.網頁標題標簽 3.網頁關鍵字 4.網頁描述 5.作者 6.自動跳轉 7.其他(引入css,js) 註:其中第三,第四和第五項,提升在瀏覽器中的搜索概率 例: 2.HTML的body標簽(文 ...
  • 憑藉應用廣泛、入門簡單的優勢,Web前端吸引了人們的廣泛關註。學習Web前端就業薪資高,因此很多人都想入門前端開發行業。 零基礎自學Web前端,你需要具備以下幾點: 1、耐性。要成為優秀的web前端開發者,要調整好心態。拋開一切的方法和技術知識,最重要的就是你的耐性。 2、學會延伸。對於新手來說,新 ...
  • 目錄判斷 js 類型的方式ES5 和 ES6 分別幾種方式聲明變數閉包的概念?優缺點?淺拷貝和深拷貝數組去重的方法DOM 事件有哪些階段?談談對事件代理的理解js 執行機制、事件迴圈介紹下 promise.allasync 和 awaitES6 的 class 和構造函數的區別transform、t ...
  • 不知道大家有沒有註意過對象中的一些通用方法,例如所有所有的對象都有 toString、constructor 等等一些方法。 當然如果要仔細看的話,大家可以: var a = {}; console.log(a); 我們可以清晰的看到他有很多的內置方法。當然,也可以看到最下麵有兩個比較怪的方法 ge ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...