vm.$vnode 和 vm._vnode 问题
来源:3-3 patch(上)

Arey_jy
2018-11-05
vm.$vnode(_parentVnode) 意思就是未经过 _render 函数处理的 vnode, vm._vnode 是经过 render处理过的,为什么文章中说的它们是一种父子关系呢? vue 为什么要在2处进行引用 _parentVnode 呢?
我们只保留关键部分的代码,这里的 _parentVnode 就是当前组件的父 VNode,而 render 函数生成的 vnode 当前组件的渲染 vnode,vnode 的 parent 指向了 _parentVnode,也就是 vm.$vnode,它们是一种父子的关系。
3回答
-
ustbhuangyi
2018-11-05
举个例子,在父组件的 template 中有一个组件标签 <child></child>。
child 的模板比如说是 <div class=child>xxxx</div>。
那么在父组件中,child 就是一个组件 vnode,它会在 patch 过程中执行 child 组件的初始化,同时把这个 vnode 作为参数传入,子组件初始化的时候这个 vnode 就是_parentVnode,那么子组件经过 _render 渲染生成的 vnode 是 vm._vnode,_vnode 你可以理解为组件的渲染 root vnode,而 $vnode 就是 _parentVnode,是这个组件在父组件中的占位组件 vnode,所以说是父子关系也不为过。332019-04-30 -
qq_飞越疯人院_1
2019-05-05
_parentVnode首先赋值给了$vnode,然后又赋值给了vnode.parent。
在_update内vnode又赋值给了_vnode,所以$vnode就是_vnode的父辈了。
00 -
Arey_jy
提问者
2018-11-05
父子关系来 表达觉得有点不太恰当吧?
00
相似问题