react核心功能實現

2021-10-19 12:50:40 字數 1363 閱讀 2395

react核心其實挺多的,但面試能說上元素建立和基本渲染過程基本就算合格。

而在此基礎上,能說清楚diff演算法的三層比較策略,15.x的遞迴不可打斷更新和

16.x以後的迴圈可打斷更新,又是一波加分項。

本篇為原始碼系列核心實現第七篇,對應下圖react部分。

本篇不會像之前的那些細緻化的去寫,因為我發現了乙個寫的十分優秀的庫,就不獻醜了。

大道至極,這個其實就是虛擬dom,乙個用於描述真實dom結構的js物件。

function

createelement

( tag, attrs=

,...children )

}

render做了很多事,但最主要的是把上邊建立的虛擬dom轉化成真實dom。

當然,這之中還會涉及事件繫結,樣式處理,diff演算法什麼的,這裡只做乙個簡化展示。

function

render

( vnode, container )

const dom = document.

createelement

( vnode.tag );if

( vnode.attrs ));

}// 遞迴渲染子節點

vnode.children.

foreach

( child =>

render

( child, dom ));

// 將渲染結果掛載到真正的dom上

return container.

( dom );}

function

setattribute

( dom, name, value )

else

if( name ===

'style'

)else

if( value &&

typeof value ===

'object'

)這種形式來設定樣式,可以省略掉單位px

dom.style[ name ]

=typeof value[ name ]

==='number'

? value[ name ]

+'px'

: value[ name ];}

}// 普通屬性則直接更新屬性

}else

if( value )

else

}}

情如風雪無常,

卻是一動既殤。

我是冷月心,下期再見。

專注核心功能

當我還小的時候,出了什麼毛病都愛用風油精。無論是蟲叮蚊咬,暈車暈船還是感冒發燒,風油精都能派上用場。因此當我頗為自豪的向我的小夥伴炫耀道 風油精什麼都能治 的時候,他的一句 風油精什麼都能治,什麼都治不好 著實給我潑了一頭冷水。我無意斥責那些多功能產品。事實上,很多多功能產品非常成功而且確實給使用者...

專注核心功能

當我還小的時候,出了什麼毛病都愛用風油精。無論是蟲叮蚊咬,暈車暈船還是感冒發燒,風油精都能派上用場。因此當我頗為自豪的向我的小夥伴炫耀道 風油精什麼都能治 的時候,他的一句 風油精什麼都能治,什麼都治不好 著實給我潑了一頭冷水。我無意斥責那些多功能產品。事實上,很多多功能產品非常成功而且確實給使用者...

部落格的核心功能

我訂閱了很多感興趣的部落格內容,嘗試了很多 的部落格功能,自己也做了部落格程式給 的使用者使用。這些都做完以後,我認真在網上找關於部落格的定義,部落格和論壇 個人站點的區別等。1 部落格是繼email bbs icq之後出現的第四種網路交流方式。部落格有三大作用 1 個人自由表達 2 知識過濾與積累...