美文网首页
tempo优化系列: 从0开始(渲染)

tempo优化系列: 从0开始(渲染)

作者: HelenYin | 来源:发表于2021-04-19 13:05 被阅读0次

    首先把渲染的架子搭出来
    我们假设有一个组件

    class MyComponent {
      render() {
        return {
          tag: 'div'
        }
      }
    }
    

    组件的产出一定是vnode

    const vnode = {
      tag: MyComponent
    }
    

    这里把vnode渲染成真实DOM,我这里用render 函数,render函数的参数是vnode和挂在元素

    render(vnode, document.getElementById('app'))
    

    接下来实现render
    render函数现在有两种情况需要渲染,一种以组件,一种是一般标签

    function render (vnode, container) {
      if (typeof vnode.tag === 'string') {
        // html标签
        mountElement(vnode, container);
      } else {
        // 组件
        mountComponent(vnode, container)
      }
    }
    
    // 一般标签
    function mountElement (vnode, container) {
      const el = document.createElement(vnode.tag)  
      container.appendChild(el);
    }
    // 组件
    function mountComponent(vnode, container) {
      // 创建组件实例
      const instance = new vnode.tag()
      // 渲染
      instance.$vnode = instance.render()
      // 挂载
      mountElement(instance.$vnode, container);
    }
    

    代码:
    https://github.com/TingYinHelen/tempo-optimization

    相关文章

      网友评论

          本文标题:tempo优化系列: 从0开始(渲染)

          本文链接:https://www.haomeiwen.com/subject/mmlilltx.html