//模拟的是真dom树
//第一个参数 必填 html标签(标记) 第二个参数选填 表示(属性) 第三个参数 选填,(子节点),要显示的内容
const React = {
createElement(tag, attrs, ...children) {
return {
tag,
attrs,
children
}
}
};
const render = (vnode, container) => {
console.log(vnode)
//****如果是一个字符串,直接把内容插入文本里
if (typeof vnode === "string") {
//创建一个文本节点
const textNode = document.createTextNode(vnode)
return container.appendChild(textNode)
}
//1.拿到虚拟的dom树 创建元素 创建一个<div></div>标签
const dom = document.createElement(vnode.tag);
console.log(dom)
//children为多个元素,需要遍历
//2.遍历子元素并挂载
vnode.children.forEach(child => {
return render(child, dom)
})
return container.appendChild(dom)
}
const ReactDom = {
render
}
ReactDom.render(
//render中创建参数
React.createElement("div", null, "hello"),
//返回的是虚拟dom树
document.getElementById("app")
)
报错,Cannot read property 'appendChild' of null
这个应该没有在页面上