mounted 不会承诺所有的子组件也都一起被挂载,为什么会有这种情况发生??

过程

在开发项目中遇到了一个问题,需要获取一个节点中的直接子节点。
操作:mounted中使用$refs获取该HTMLCollection,this.$refs['node'].children
打印该HTMLCollection可以读取数组队列,却无法读取该数组长度。

查看文档:
1、MDN-HTMLCollection
2、vue.js-mounted

问题:mounted 不会承诺所有的子组件也都一起被挂载....
然后使用文档说明:this.$nextTick,然后,额没有效果.....

然后使用最尴尬的方式:setTimeout,有效了.....

疑问: 官方文档为什么说mounted无法加载所有子组件?? 还有为什么this.$nextTick也依然无效??

阅读 6.7k
1 个回答

简短的答案。
假设一种例外情况。在你的组件中,包含一个异步组件。因为异步组件一定不会第一时间实例化,自然无法保证子组件节点挂载。

详细的答案。
因为生命周期属于组件,所以当虚拟DOM树对比完后,只会对此组件的虚拟DOM树要更新的部分做更新。而子组件在虚拟DOM树中,只知道子组件的构造器(Ctor),传入的数据(data)和子项(children)有没有变化,不关心子组件内部的虚拟DOM树。因此,只能保证这个组件要去渲染它的子组件,却无法保证它的子组件内部是如何渲染的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏