react源碼解析1.開(kāi)篇介紹和面試題

react源碼解析1.開(kāi)篇介紹和面試題

視頻課程(高效學(xué)習(xí)):進(jìn)入課程

課程目錄:

1.開(kāi)篇介紹和面試題

2.react的設(shè)計(jì)理念

3.react源碼架構(gòu)

4.源碼目錄結(jié)構(gòu)和調(diào)試

5.jsx&核心api

6.legacy和concurrent模式入口函數(shù)

7.Fiber架構(gòu)

8.render階段

9.diff算法

10.commit階段

11.生命周期

12.狀態(tài)更新流程

13.hooks源碼

14.手寫(xiě)hooks

15.scheduler&Lane

16.concurrent模式

17.context

18事件系統(tǒng)

19.手寫(xiě)迷你版react

20.總結(jié)&第一章的面試題解答

21.demo

怎樣學(xué)習(xí)react源碼

作為前端最常用的js庫(kù)之一菌羽,熟悉react源碼成了高級(jí)或資深前端工程師必備的能力,如果你不想停留在api的使用層面或者想在前端技能的深度上有所突破是晨,那熟悉react源碼將是你進(jìn)步的很好的方式层扶。

react的純粹體現(xiàn)在它的api上箫章,一切都是圍繞setState狀態(tài)更新進(jìn)行的,但是內(nèi)部的邏輯卻經(jīng)歷了很大的重構(gòu)和變化镜会,而且代碼量也不小炉抒,如果只是從源碼文件和函數(shù)來(lái)閱讀,那會(huì)很難以理解react的渲染流程稚叹。優(yōu)秀工程師幾年時(shí)間打造的庫(kù)焰薄,必定有借鑒之處拿诸,那么我們應(yīng)該怎樣學(xué)習(xí)react源碼呢。

react源碼1.3

首先,我們可以從函數(shù)調(diào)用棧入手,理清react的各個(gè)模塊的功能和它們調(diào)用的順序生巡,蓋房子一樣,先搭好架子,對(duì)源碼有個(gè)整體的認(rèn)識(shí)霹肝,然后再看每個(gè)模塊的細(xì)節(jié)垮兑,第一遍的時(shí)候切忌糾結(jié)每個(gè)函數(shù)實(shí)現(xiàn)的細(xì)節(jié)膊夹,陷入各個(gè)函數(shù)的深度調(diào)用中侵佃。其次可以結(jié)合一些demo和自己畫(huà)圖理解叉抡,react源碼中設(shè)計(jì)大量的鏈表操作撵颊,畫(huà)圖是一個(gè)很好的理解指針操作的方式。源碼里也有一些英文注釋?zhuān)梢愿鶕?jù)注釋或者根據(jù)此react源碼解析文章進(jìn)行理解番枚。

熟悉react源碼并不是一朝一夕的事洋丐,想精進(jìn)自己的技術(shù)掷漱,必須花時(shí)間才行喳魏。

react源碼1.2
react源碼3.2

課程特色

本課程遵循react v17.0.1源碼的核心思想,目的是打造一門(mén)通俗易懂的react源碼解析系列文章。課程從源碼的各個(gè)模塊開(kāi)始曼验,結(jié)合大量demo押蚤、示例圖解和視頻教程掖桦,帶著大家一步一步調(diào)試react源碼蒲犬,課程也會(huì)完全遵循react17手寫(xiě)hook和精簡(jiǎn)版的react方便大家的理解,隨著react大版本的更新亭螟,此課程也會(huì)一直更新。

課程結(jié)構(gòu)

react源碼1.1

課程收獲

為什么要學(xué)習(xí)react源碼呢道媚,你是使用了api很久扁掸,停留在框架使用層面還是會(huì)主動(dòng)去了解框架的邏輯和運(yùn)行方式呢欢嘿。跟著課程走,理解起來(lái)不費(fèi)力也糊,你將收獲:

  • 面試加分:大廠前端崗都要求熟悉框架底層原理炼蹦,也是面試必問(wèn)環(huán)節(jié),熟悉react源碼會(huì)為你的面試加分狸剃,也會(huì)為你的談薪流程增加不少籌碼
  • 鞏固基礎(chǔ)知識(shí):在源碼的scheduler中使用了小頂堆 這種數(shù)據(jù)結(jié)構(gòu)掐隐,調(diào)度的實(shí)現(xiàn)則使用了messageChannel,在render階段的reconciler中則使用了fiber钞馁、update虑省、鏈表 這些結(jié)構(gòu),lane模型使用了二進(jìn)制掩碼僧凰,我們也會(huì)介紹diff算法怎樣降低對(duì)比復(fù)雜度探颈。學(xué)習(xí)本課程也順便鞏固了數(shù)據(jù)結(jié)構(gòu)和算法、事件循環(huán)训措。
  • 日常開(kāi)發(fā)提升效率:熟悉react源碼之后伪节,你對(duì)react的運(yùn)行流程有了新的認(rèn)識(shí),在日常的開(kāi)發(fā)中绩鸣,相信你對(duì)組件的性能優(yōu)化怀大、react使用技巧和解決bug會(huì)更加得心應(yīng)手。

相信學(xué)完課程之后呀闻,你對(duì)react的理解一定會(huì)上升一個(gè)檔次化借,甚至?xí)^(guò)大多數(shù)面試官了

常見(jiàn)面試題(帶上問(wèn)題學(xué)習(xí)吧)

以下這些問(wèn)題可能你已經(jīng)有答案了,但是你能從源碼角度回答出來(lái)嗎捡多。

  1. jsx和Fiber有什么關(guān)系
  2. react17之前jsx文件為什么要聲明import React from 'react'蓖康,之后為什么不需要了
  3. Fiber是什么,它為什么能提高性能

hooks

  1. 為什么hooks不能寫(xiě)在條件判斷中

狀態(tài)/生命周期

  1. setState是同步的還是異步的
  2. componentWillMount垒手、componentWillMount蒜焊、componentWillUpdate為什么標(biāo)記UNSAFE

組件

  1. react元素$$typeof屬性什么
  2. react怎么區(qū)分Class組件和Function組件
  3. 函數(shù)組件和類(lèi)組件的相同點(diǎn)和不同點(diǎn)

開(kāi)放性問(wèn)題

  1. 說(shuō)說(shuō)你對(duì)react的理解/請(qǐng)說(shuō)一下react的渲染過(guò)程
  2. 聊聊react生命周期
  3. 簡(jiǎn)述diff算法
  4. react有哪些優(yōu)化手段
  5. react為什么引入jsx
  6. 說(shuō)說(shuō)virtual Dom的理解
  7. 你對(duì)合成事件的理解
    1. 我們寫(xiě)的事件是綁定在dom上么,如果不是綁定在哪里淫奔?
    2. 為什么我們的事件手動(dòng)綁定this(不是箭頭函數(shù)的情況)
    3. 為什么不能用 return false來(lái)阻止事件的默認(rèn)行為山涡?
    4. react怎么通過(guò)dom元素堤结,找到與之對(duì)應(yīng)的 fiber對(duì)象的?

解釋結(jié)果和現(xiàn)象

  1. 點(diǎn)擊Father組件的div,Child會(huì)打印Child嗎

    function Child() {
      console.log('Child');
      return <div>Child</div>;
    }
    
    
    function Father(props) {
      const [num, setNum] = React.useState(0);
      return (
        <div onClick={() => {setNum(num + 1)}}>
          {num}
          {props.children}
        </div>
      );
    }
    
    
    function App() {
      return (
        <Father>
          <Child/>
        </Father>
      );
    }
    
    const rootEl = document.querySelector("#root");
    ReactDOM.render(<App/>, rootEl);
    
  1. 打印順序是什么

    function Child() {
      useEffect(() => {
        console.log('Child');
      }, [])
      return <h1>child</h1>;
    }
    
    function Father() {
      useEffect(() => {
        console.log('Father');
      }, [])
      
      return <Child/>;
    }
    
    function App() {
      useEffect(() => {
        console.log('App');
      }, [])
    
      return <Father/>;
    }
    
  1. useLayoutEffect/componentDidMount和useEffect的區(qū)別是什么

    class App extends React.Component {
      componentDidMount() {
        console.log('mount');
      }
    }
    
    useEffect(() => {
      console.log('useEffect');
    }, [])
    
  1. 如何解釋demo_4眉抬、demo_8暖途、demo_9出現(xiàn)的現(xiàn)象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘾带,隨后出現(xiàn)的幾起案子鼠哥,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朴恳,死亡現(xiàn)場(chǎng)離奇詭異抄罕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)于颖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)呆贿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人森渐,你說(shuō)我怎么就攤上這事做入。” “怎么了同衣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵竟块,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我耐齐,道長(zhǎng)浪秘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任埠况,我火速辦了婚禮秫逝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘询枚。我一直安慰自己违帆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布金蜀。 她就那樣靜靜地躺著刷后,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渊抄。 梳的紋絲不亂的頭發(fā)上尝胆,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音护桦,去河邊找鬼含衔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛二庵,可吹牛的內(nèi)容都是我干的贪染。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼催享,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杭隙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起因妙,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痰憎,失蹤者是張志新(化名)和其女友劉穎票髓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铣耘,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洽沟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜗细。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玲躯。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鳄乏,靈堂內(nèi)的尸體忽然破棺而出跷车,到底是詐尸還是另有隱情,我是刑警寧澤橱野,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布朽缴,位于F島的核電站,受9級(jí)特大地震影響水援,放射性物質(zhì)發(fā)生泄漏密强。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一蜗元、第九天 我趴在偏房一處隱蔽的房頂上張望或渤。 院中可真熱鬧,春花似錦奕扣、人聲如沸薪鹦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)池磁。三九已至,卻和暖如春楷兽,著一層夾襖步出監(jiān)牢的瞬間地熄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工芯杀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留端考,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓揭厚,卻偏偏與公主長(zhǎng)得像却特,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棋弥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容