react原始碼研究了好久,然後始終都不是很深入,都怪自己,**看了就看了,今天看一點,明天看一點,第7天問問自己第一天看了什麼的時候,就空白一片了,只知道這個函式呼叫過,具體做什麼事情,不記得了。
既然,發現了問題,就決定好好的解決一下。乙個模組乙個模組的解決。有緣看見本文的人,歡迎指教,請輕拍~
栗子**於阮一峰老師的demo:github.com/ruanyf/reac…
react版本:15.0.1(不要問我為什麼不直接研究16.0,答案很簡單,我自己當前的版本就是15.0.1,先把這個看完了,再乙個版本乙個版本的看!)
簡單的略過,直接看核心:
demo1很簡單,實現了乙個hello world的栗子,先來看看demo1的**:
reactdom.render(
hello, world!,
document.getelementbyid('example')
);複製**
經過babel轉化,如下:
reactdom.render(react.createelement(
'span',
null,
'hello, world!'
), document.getelementbyid('example'));複製**
我們一步步追蹤,看看呼叫了哪些,結果如下圖所示:
hello world呼叫函式順序
可以看到,我們第乙個呼叫的函式叫做createelement,那我們這篇主要講下reactelementvalidator裡面的內容。
reactelementvalidator內,三個函式:
拋開一些react的內的驗證**,剩餘**如下:
createelement: function (type, props, children)
if (validtype)
}validateproptypes(element);
return element;
}複製**
上面**,可分為三個部分:
我們再來看看cloneelement函式,函式**短短幾行,但是基本流程和createelement相似,都是,先建立reactnode再驗證。**如下:
cloneelement: function (element, props, children)
validateproptypes(newelement);
return newelement;
}複製**
同樣,我們在react原始碼淺入(二)裡再探一探cloneelement函式。
validateproptypes
再從另外乙個維度看,如下圖所示:
validatechildkeys函式詳解(目的:檢驗children節點的key值是否存在)
validateproptypes函式詳解(目的:檢測props型別,bool、function、isrequired...)
React原始碼解析
距離第一篇 react原始碼解析 一 已經過去將近4個月的時間,由於是我第一次進行原始碼解析相關的寫作,思路和文筆還不夠成熟。一百多天以來,我基於讀者反饋反思這幾篇文章中的不足,同時也在不斷學習借鑑其他優秀作者的寫作方法和寫作思路。最終總結出對於自己的原始碼寫作來說,需要改進的幾點 1.示例 太多 ...
react 原始碼defaultProps實現
首先我們回顧一下 defaultprops 的用法import react from react render name hello react 這樣我們就可以得到乙個渲染出hello react的介面啦。此時的關鍵,在於需要理解 reactdom.render 實際執行了什麼方法。經過斷點除錯,我...
react原始碼探索
react核心部分為 1 虛擬dom物件 reactdom.render args,element 這個方法第乙個引數接收三種形式的內容的 第一種 字串 第二種 由createclass建立的物件,使用createelement處理 第三種 直接有createelement建立的物件 這些還未呼叫r...