摘要:司徒正美的一款了不起的化方案,支持到。行代碼內實現一個胡子大哈實現的作品其實就是的了源碼學習個人文章源碼學習個人文章源碼學習個人文章源碼學習個人文章這幾片文章的作者都是司徒正美,全面的解析和官方的對比。
前言
在過去的一個多月中,為了能夠更深入的學習,使用React,了解React內部算法,數據結構,我自己,從零開始寫了一個玩具框架。
截止今日,終于可以發布第一個版本,因為就在昨天,我跑通了之前的一個小項目。
預覽地址:動態簡歷luy版本
倉庫地址:喜歡的給點星星哦~
框架地址:Luy
真的從零開始嗎?其實并不是,我并沒有重新把jsx解析器進行造輪子,我用上了官方的解析器去幫助我解析jsx。
在正式開始寫Luy的時候,還是比較盲目和恐懼的,原因如下
雖然都知道React是基于虛擬DOM來渲染的,但是虛擬DOM到底是什么?怎么運作的
React的setState是異步的,這個我們都知道。但是他的異步和setTimeOut的異步是一樣的嗎?內部是不是用setTimeOut實現的?
react的事件合成系統。在react官方中,幾萬行代碼,有差不多40%左右是用于模擬事件的。這部分內容是如何實現的?為什么這么做呢?
React列表中的key為什么那么重要?虛擬DOM的優化策略又是什么?
帶著這些疑問,我要么是去讀源碼,要么去找文章,但是真正弄懂這些知識,可能還得動手自己實踐一次我才會感到安心。
制造這個玩具框架碰到了很多問題嗎?雖然說現在React-like的框架一大堆,大家都想做出自己的mini 化方案,但是制造一個React-like框架還是超級困難的,可想而知,當初FB工程師們在沒有React的情況下,是如何造出React的,天才。
源碼解析不多,而且不完備:很多號稱解析React源碼的文章其實只是非常淺層次的讀一讀,基本上的套路就是,看到哪里的代碼,網上一帖就成了一篇文章了,很多知識點還是得親自去打斷電調試React官方版本才能知道。
好的文章往往只專研了一兩個點,知識點需要慢慢拼湊:網上不乏好文章的,但是好的文章不可能面面俱到。比如有些人研究setState,有些人研究生命周期函數,有些人還研究了ref,甚至有些人研究了Vdom。這些知識點很散亂,非常難以拼湊在一起,基本要花一兩天才能搞懂一個知識點。
虛擬dom算法:我說實話,虛擬DOM的算法其實并不難,也就是樹的遞歸遍歷,在遍歷的同時創建和比對。但是奇妙的就是,市面上有一堆虛擬DOM產品,雖然大致相同,但是在處理某些地方的時候不一樣,后文會講。
列表的key:虛擬DOM算法最難的地方。對應的實際場景就是如下:
....
這一個部分難就難在「更新」上,這也是每一款虛擬DOM最不一樣的地方。
為什么inferno.js這么快?這個回答里,其實給出了答案。
而Luy使用的算法是:vue2源碼學習開胃菜,速度上來說非常不錯。
當然我不是吹噓自己的框架有多牛逼,只是實現了這個算法還是非常開心的。
這部分內容給想學習React源碼的朋友們首先,閱讀React代碼是最直接的方案,但是因為react源碼實在太多了,我們必須另尋出路。有兩個辦法
閱讀react代碼最初版本(非常的老了...
閱讀市面上比較成熟的react-mini框架的代碼
我選擇了第二種方式,可能會有人說哎呀,你水平不夠。我承認,我水平確實不行,讀react源碼頭有點痛。
我的方法就是先把東西做出來,然后有了基本思路,再看React源碼你就知道它在干什么了。一定要注意的是:框架里任何一行代碼都是為了解決某一個或者多個問題而存在的,當你腦海中不能將這些問題和代碼聯系在一起的時候,你他嗎根本就是在讀天書。所以,選擇一個代碼較少的先讀著,理解react的套路。
@司徒正美 的anujs:一款了不起的mini 化react方案,支持到IE6。代碼及其好懂和老練,框架如其簽名:javascript魔法師。如果閱讀過anujs的朋友,一定也會發現Luy部分代碼很像anujs,沒錯,有很多代碼我都直接抄的,因為 @司徒正美 的代碼寫的真的很好。RubyLouvre/anu,是世界上最接近react官方的產品了。
Inferno.js:另外一款出名的react lite框架,Vdom的速度是最高的,一系列的優化方案非常值得學習
developit/preact:大名鼎鼎的preact,速度快,體積小而著稱。gzip完只有3k,不過對react官方的支持其實非常的差。比較搞笑的是,當你支持react的輪子的時候,使用compact功能時,其性能大大下降!(哈哈哈哈哈哈哈哈哈笑死我了)
@胡子大哈 :他寫的React.js 小書,非常的棒,給予了我造react的最基本知識。
40 行代碼內實現一個 React.js: @胡子大哈 實現的作品
snabbdom/snabbdom:其實就是vue的vdom了
preact源碼學習(1) - 個人文章 - SegmentFault
preact源碼學習(2) - 個人文章 - SegmentFault
preact源碼學習(3) - 個人文章 - SegmentFault
preact源碼學習(4) - 個人文章 - SegmentFault:這幾片文章的作者都是 @司徒正美 ,全面的解析和官方的對比。牛x到了極點。
Build your own React.js · GitBook:一篇外國的文章,看完你基本可以造出一個可以setState的react了
Build Your Own React:第一次渲染:本文也很重要,介紹了react component的幾種模式
@程墨Morgan :《深入淺出react和redux》一書非常的實在,我也推薦過很多次了,對我理解react和redux很有幫助.
當然,還有很多知識點是通過google得到的,一切來之不易。在讀源碼的過程中,痛苦但是快樂。
這個框架會有未來嗎?這個項目其實最初的想法只是學習react的內部原理,但是一路走來我的想法也改變了,會盡自己最大的所能,維護下去,并且跟進react官方的變化(說實話createPortal Luy也是支持的!)
畢竟,學習其實就是模仿,創造永遠在模仿的前提下。最近公司準備上一個新的小項目,也是我第一個全權負責的項目,所以我決定上一把我的Luy進行試點(好就好在,Luy更換react其實是無痛的,實在有什么問題,直接換react上,哈哈哈
最后代碼在這里,框架地址:Luy,總共加起來目前只有1100+行,不多,可以作為「react套路學習版本」
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89117.html
摘要:開始寫代碼構造函數講了那么多的理論,大家一定是暈了,但是沒辦法,架構已經比之前的簡單要復雜太多了,因此不可能指望一次性把的內容全部理解,需要反復多看。 前言 Facebook 的研發能力真是驚人, Fiber 架構給 React 帶來了新視野的同時,將調度一詞介紹給了前端,然而這個架構實在不好懂,比起以前的 Vdom 樹,新的 Fiber 樹就麻煩太多。 可以說,React 16 和 ...
摘要:是基于的最小實現。的實現可以參考這篇文章,我稱其為前向。而為簡單起見,仍使用原生事件,采用事件委托的方式,將所有監聽函數掛在上。的做法參考了的做法,實現了在上添加和刪除監聽函數的方法,并以判斷觸發的節點。 Kut showImg(https://segmentfault.com/img/remote/1460000014075317);showImg(https://segmentfa...
閱讀 2204·2021-10-13 09:39
閱讀 3408·2021-09-30 09:52
閱讀 800·2021-09-26 09:55
閱讀 2774·2019-08-30 13:19
閱讀 1888·2019-08-26 10:42
閱讀 3185·2019-08-26 10:17
閱讀 543·2019-08-23 14:52
閱讀 3631·2019-08-23 14:39