function render(element,container){
if(typeof element == 'string' || typeof element == 'number'){ //如果element是一個普通的字符串或者數(shù)字,就創(chuàng)建文本節(jié)點并添加進去
container.appendChild(document.createTextNode(element));
}
//這里是因為在執(zhí)行React.createElement()方法之后返回的element元素包含了type、props屬性
let type = element.type; // 獲取react元素的類型
let props = element.props; //獲取react元素的屬性
if(typeof type === 'function'){
let renderedElement;
if(type.isReactComponent){ //說明是一個類組件
let inst = new type(props);
renderedElement = inst.render(); //調(diào)用class的render方法返回react元素
}else{ //函數(shù)組件
renderedElement = type(props);
}
type = renderedElement.type;
props = renderedElement.props;
}
//創(chuàng)建react元素
let domElement = document.createElement(type);
for(let propName in props){
if(propName == 'className'){
domElement.className = props[propName];
}else if(propName == 'style'){
let styleObj = props[propName];
for(let attr in styleObj){
domElement.style[attr] = styleObj[attr];
}
}else if(/^on[A-Z]/.test(propName)){ //處理react事件
domElement[propName.toLowerCase()] = props[propName];
}else if(propName == 'children'){
let children = Array.isArray(props.children) ? props.children : [props.children];
children.forEach(child => render(child,domElement));
}
}
container.appendChild(domElement);
}
export default {
render
}
React源碼解析之ReactDOM.render()
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 上回說到了ReactMount._renderNewRootComponent中調(diào)用了ReactUpdates.b...
- 上篇博客介紹了instantiateReactComponent方法,方法內(nèi)部實現(xiàn)還是很簡單的,那么回到react...
- 英文注釋翻譯 React 中的 Transaction 創(chuàng)建一個黑盒環(huán)境來對方法進行封裝,它能夠封裝任何方法,以便...
- 之前介紹了React16.8版本的React公用API,本著學(xué)習(xí)最新版的React的想法,但是敗在了Fiber的陣...
- 一年多前,有些城市出臺租購?fù)瑱?quán)政策,民眾聽后一片歡呼,以為租房子就可享受城市的各項權(quán)利,包括學(xué)位。 我也是看了一些...