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 知識過濾與積累...