Vue-Vnode类型

Vnode的类型

1.注释节点

    export const createEmptyVNode = text => {
        const node = new VNode()
        node.text = text;
        node.isComment = true;
        return node
    }
// 
一个注释节点只有两个有效属性` text ``isComment`

2.文本节点

    export function createTextVNode(val) {
        return new VNode(undefined, undefined, undefined, String(val))
    }

 // 文本节点只有`text`属性

3.元素节点

   `<p><span>Hello</span><span>World</span></p>`
    {
        children: [VNode, VNode], // 当前节点的子节点列表
        context: {...}, // 当前组件的vue.js实例
        data: {...}, // 节点上的数据
        tag: "p", // 节点名称
        ...
    }

4.组件节点

    // <child></child>
    {
        componentInstance: {...},
        componentOptions: {...},
        context: {...},
        data: {...},
        tag: "vue-component-1-child",
        ...    
    }
// 组件节点独有的属性:
`componentInstance`:组件实例
`componentOptions`:组件节点的选项参数,包含了propsData、tag和children

5.函数式节点

     {
        functionalContext: {...},
        functionalOptions: {...},
        context: {...},
        data: {...},
        tag: "div"
   	  }

函数式节点独有的属性:`functionalContext``functionalOptions`

6.克隆节点

克隆节点是将现有节点的属性赋值给新节点中,作用是优化静态节点和插槽节点slot node

export function cloneVNode(vnode, deep) {
        const cloned = new VNode(vnode.tag, vnode.data, vnode.children, vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory)
        cloned.ns = vnode.ns
        cloned.isStatic = vnode.isStatic
        cloned.key = vnode.key
        cloned.isComment = vnode.isComment
        cloned.isCloned = true
        if (deep && vnode.children) {
            cloned.children = cloneVNodes(vnode.children)
        }
        return cloned
    }
 // `isCloned `克隆节点为true,被克隆节点为false

Vnode是一个类,生成不同类型的vnode实例,不同类型的实例表示不同类型的真实dom

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值