Skip to content
On this page

初始化流程

  • 1 runtime-dom createApp 方法 ensureRenderer

  • 2 createRenderer 一开始没有渲染器,去创建一个渲染器

  • 3 runtime-core renderer.ts 文件 baseCreateRenderer 方法

    • 返回 createAppAPI
    • 实现
    baseCreateRenderer方法
      return {
     render,
     hydrate,
     createApp: createAppAPI(render, hydrate)
    }
    
    
    

    render 方法

      const render: RootRenderFunction = (vnode, container, isSVG) => {
     if (vnode == null) {
       if (container._vnode) {
         unmount(container._vnode, null, null, true)
       }
     } else {
       patch(container._vnode || null, vnode, container, null, null, null, isSVG)
     }
     flushPostFlushCbs()
     container._vnode = vnode
    }
    
    

    apiCreateApp.ts 中 createAppAPI 创建虚拟 dom。调用 render 方法 mount

  if (isHydrate && hydrate) {
           hydrate(vnode as VNode<Node, Element>, rootContainer as any)
         } else {
           render(vnode, rootContainer, isSVG)
         }
  • 4 开始走 patch 方法 processComponent--mountComponent - 生成 instance 没看懂

  • 5 没看懂 setupComponent(instance) 对属性、插槽做初始化,如果是状态形组件,代码会走 setupStatefulComponent

  • 6 setupRenderEffect

Released under the MIT License.