Javascript 如何创建Vue.js组件()顺序集?

Javascript 如何创建Vue.js组件()顺序集?,javascript,vue.js,vue-component,Javascript,Vue.js,Vue Component,给定两个组件,都加载到第三个组件中,是什么决定了为每个组件创建的生命周期的启动顺序 顶级组件 <template> <div> <start-date-filter /> <end-date-filter /> </div> </template> <script> import StartDateFilter from './StartDateFilter.vue'

给定两个组件,都加载到第三个组件中,是什么决定了为每个组件创建的生命周期的启动顺序

顶级组件

<template>
   <div>
        <start-date-filter />
        <end-date-filter />
   </div>
</template>

<script>
import StartDateFilter from './StartDateFilter.vue';
import EndDateFilter from './EndDateFilter.vue';

export default {
    components: {
       StartDateFilter,
       EndDateFilter
    }
}
</script>
<script>
export default {
   created() {
      console.log('made it first');
   }
}
</script>
<script>
export default {
   created() {
      console.log('made it second');
   }
}
</script>

从“/StartDateFilter.vue”导入StartDateFilter;
从“/EndDateFilter.vue”导入EndDateFilter;
导出默认值{
组成部分:{
StartDateFilter,
EndDateFilter
}
}
StartDate过滤器组件

<template>
   <div>
        <start-date-filter />
        <end-date-filter />
   </div>
</template>

<script>
import StartDateFilter from './StartDateFilter.vue';
import EndDateFilter from './EndDateFilter.vue';

export default {
    components: {
       StartDateFilter,
       EndDateFilter
    }
}
</script>
<script>
export default {
   created() {
      console.log('made it first');
   }
}
</script>
<script>
export default {
   created() {
      console.log('made it second');
   }
}
</script>

导出默认值{
创建(){
log('makeitfirst');
}
}
EndDateFilter组件

<template>
   <div>
        <start-date-filter />
        <end-date-filter />
   </div>
</template>

<script>
import StartDateFilter from './StartDateFilter.vue';
import EndDateFilter from './EndDateFilter.vue';

export default {
    components: {
       StartDateFilter,
       EndDateFilter
    }
}
</script>
<script>
export default {
   created() {
      console.log('made it first');
   }
}
</script>
<script>
export default {
   created() {
      console.log('made it second');
   }
}
</script>

导出默认值{
创建(){
log('makedthesecond');
}
}

我认为不能保证订购。这不是您真正应该依赖的东西,理想情况下,兄弟组件不应该直接相互对话,所以这不重要

通常,当Vue渲染时,它将尝试重用上一次渲染中的子组件。各种因素影响VNode匹配算法,以确定哪些旧节点与哪些新节点配对。已经存在的节点的任何组件都不会调用其
钩子

考虑到没有现有组件的新渲染的简单情况

您可以通过使用
debugger
语句而不仅仅是控制台日志记录来查看当前代码如何处理此问题。在调试器中暂停时,您可以查看调用堆栈以查看组件是如何创建的

目前,Vue似乎将按照子项在VNode的
子项
数组中出现的顺序处理这些子项。方法
createChild
只是循环通过它传递的子数组,该数组来自
createElm
,它从
vnode.children
获取


我认为这应该意味着为组件创建的
钩子将按照它们在模板中出现的顺序被调用,只要不涉及任何插槽。

在模板中出现的顺序至少定义了顺序。