React原始碼淺入(一)

2021-09-24 06:45:49 字數 1553 閱讀 6968

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...