美文网首页
用vnode实现一个DOM结构

用vnode实现一个DOM结构

作者: 玲儿珑 | 来源:发表于2020-05-20 18:32 被阅读0次

vnode基本属性的定义可以参见源码:src/vdom/vnode.js里面对于vnode的定义。

constructor (
    tag?: string,
    data?: VNodeData,         // 关于这个节点的data值,包括attrs,style,hook等
    children?: ?Array<VNode>, // 子vdom节点
    text?: string,        // 文本内容
    elm?: Node,           // 真实的dom节点
    context?: Component,  // 创建这个vdom的上下文
    componentOptions?: VNodeComponentOptions
  ) {
    this.tag = tag
    this.data = data
    this.children = children
    this.text = text
    this.elm = elm
    this.ns = undefined
    this.context = context
    this.functionalContext = undefined
    this.key = data && data.key
    this.componentOptions = componentOptions
    this.componentInstance = undefined
    this.parent = undefined
    this.raw = false
    this.isStatic = false
    this.isRootInsert = true
    this.isComment = false
    this.isCloned = false
    this.isOnce = false
  }

  // DEPRECATED: alias for componentInstance for backwards compat.
  /* istanbul ignore next */
  get child (): Component | void {
    return this.componentInstance
  }
}

每一个vnode都映射到一个真实的dom节点上。其中几个比较重要的属性:

  • tag 属性即这个vnode的标签属性
  • data 属性包含了最后渲染成真实dom节点后,节点上的class,attribute,style以及绑定的事件
  • children 属性是vnode的子节点
  • text 属性是文本属性
  • elm 属性为这个vnode对应的真实dom节点
  • key 属性是vnode的标记,在diff过程中可以提高diff的效率,后文有讲解

比如,我定义了一个vnode,它的数据结构是:

    {
        tag: 'div'
        data: {
            id: 'app',
            class: 'page-box'
        },
        children: [
            {
                tag: 'p',
                text: 'this is demo'
            }
        ]
    }

最后渲染出的实际的dom结构就是:

   <div id="app" class="page-box">
       <p>this is demo</p>
   </div>

相关文章

  • 用vnode实现一个DOM结构

    vnode基本属性的定义可以参见源码:src/vdom/vnode.js里面对于vnode的定义。 每一个vnod...

  • Vue虚拟Dom

    虚拟dom:vdom是树状结构,其节点为vnode,vnode和浏览器DOM中的Node一一对应,通过vnode的...

  • 4.实现 Virtual DOM 下的一个 VNode 节点

    实现 Virtual DOM 下的一个 VNode 节点 什么是VNode 我们知道,render functio...

  • Vue原理学习(四)

    实现Virtual DOM 的VNode节点 在这里,我们首先要区分Virtual DOM 和VNode的意思,V...

  • Vue3.x 组件的渲染过程

    vnode 到真实 DOM 是如何转换的 ? 一个组件想要生成 DOM 的过程 创建 vnode -----> 渲...

  • React浅析(五):虚拟DOM和Render函数

    虚拟DOM 虚拟DOM(下面简化称为Vnode)简而言之 ,就是用js去描述一个dom节点树,而DOM变化的对比,...

  • 虚拟DOM

    什么是vnode vnode tree是对真实dom tree的一层抽象。 每个vnode节点对应真实dom的属性...

  • 实现一个简易的虚拟DOM

    虚拟DOM 虚拟DOM用原生的JavaScript模拟实现了DOM结构,.我们通过操作这个虚拟DOM树来实现对页面...

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

    首先把渲染的架子搭出来我们假设有一个组件 组件的产出一定是vnode 这里把vnode渲染成真实DOM,我这里用r...

  • vue 虚拟dom

    vnode => dom虚拟 => 真是dom (vue 初始化渲染) 更新节点

网友评论

      本文标题:用vnode实现一个DOM结构

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