请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

vm.$vnode 和 vm._vnode 问题

vm.$vnode(_parentVnode) 意思就是未经过 _render 函数处理的 vnode, vm._vnode 是经过 render处理过的,为什么文章中说的它们是一种父子关系呢? vue 为什么要在2处进行引用 _parentVnode 呢?

我们只保留关键部分的代码,这里的 _parentVnode 就是当前组件的父 VNode,而 render 函数生成的 vnode 当前组件的渲染 vnode,vnode 的 parent 指向了 _parentVnode,也就是 vm.$vnode,它们是一种父子的关系。

正在回答 回答被采纳积分+3

3回答

ustbhuangyi 2018-11-05 22:52:59

举个例子,在父组件的 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,所以说是父子关系也不为过。

3 回复 有任何疑惑可以回复我~
  • 提问者 Arey_jy #1
    谢谢黄老师,我大致明白了。
    回复 有任何疑惑可以回复我~ 2018-11-05 23:53:38
  • 有例子说明会很清楚很多了
    回复 有任何疑惑可以回复我~ 2019-04-30 01:04:57
  • 嗯,学习过程中可以自己去写几个小栗子,有助于理解
    回复 有任何疑惑可以回复我~ 2019-04-30 01:05:58
qq_飞越疯人院_1 2019-05-05 23:25:32

_parentVnode首先赋值给了$vnode,然后又赋值给了vnode.parent。

在_update内vnode又赋值给了_vnode,所以$vnode就是_vnode的父辈了。

0 回复 有任何疑惑可以回复我~
提问者 Arey_jy 2018-11-05 22:04:33

父子关系来 表达觉得有点不太恰当吧? 

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信