react创建虚拟dom树

//模拟的是真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

报错信息

阅读 2.2k
1 个回答
document.getElementById("app")

这个应该没有在页面上

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题