React 和 React-Dom 是核心模組
React:是核心庫,當使用JSX語法時,必須讓React 存在當前作用域下
React元素:是通過JSX語法建立的在JS中存在的HTML的標籤
JSX語法:是一種JS和Html組合1的一種混合語法
ReactDOM.render:
1> 把虛擬的DOM轉換成真實的DOM
2> 把真實的DOM插入到根元素中
3> ReactDOM 當render渲染時,會把根元素中的所有DOM結構進行替換
4> 第三個引數是個回撥函式,當把真實DOM渲染到頁面時,執行這個地方的回撥函式
class Element{
constructor(type,attr,children){
this.type=type;
this.attr=attr;
this.children=children;
/*this.props={...attr,children:children}*/
}
render(){
// 這個方法將虛擬的DOM轉成真實的DOM;
let ele = document.createElement(this.type);
// 2. 設定行間屬性
for(let key in this.attr){
let _key = key;
if(key==="className"){
_key="class"
}
if(key==="htmlFor"){
_key="for"
}
ele.setAttribute(_key,this.attr[key]);
}
// 3.children
this.children.forEach(item=>{
// 如果陣列中的成員是Element的例項,需要繼續呼叫render方法;將虛擬的DOM轉成真實的DOM;
// 迴圈子節點,都放入ele中;
let curEle = item instanceof Element?item.render():document.createTextNode(item);
ele.appendChild(curEle);
});
return ele;// 將建立的元素轉成DOM返回;
}
}
let obj = {
createElement(type,attr,...children){
// type: 元素型別
// attr:行間屬性
// children : 子節點 ... 把多餘的引數放進一個陣列中;
return new Element(type,attr,children)
}
}
let objDOM ={
render(element,container){
// container : 容器,根元素;
// element: 虛擬的DOM物件;當render執行時,讓這個虛擬的DOM轉成真實的DOM;
container.appendChild(element.render())
}
}
let y = obj.createElement("div",{a:1,className:12},"中國北京")
objDOM.render(y,document.getElementById("root"))
複製程式碼
來吧