单个vue组件的生命周期
一个单独的 Vue 组件有多个生命周期钩子,允许在组件的不同生命周期阶段执行自定义的逻辑。以下是 Vue 组件的生命周期钩子及其简要描述:
-
创建阶段:
beforeCreate
: 在实例初始化之后、数据观测 (data observation) 和事件/监听器的配置之前被调用。created
: 在实例创建完成后被立即调用。此时,实例已完成以下配置:数据观测 (data observation)、属性和方法的运算,以及$el
属性的初始化。
-
挂载阶段:
beforeMount
: 在挂载开始之前被调用,相关的render
函数首次被调用之前。mounted
: 实例被挂载后调用,此时el
被新创建的vm.$el
替换了。如果根实例挂载到了一个文档内的元素上,当mounted
被调用时vm.$el
也在文档内。
-
更新阶段:
beforeUpdate
: 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。updated
: 实例更新完毕后调用。此时组件的 DOM 已经更新,可以执行依赖于 DOM 的操作。
-
销毁阶段:
beforeDestroy
: 实例销毁之前调用。在这一步,实例仍然完全可用。destroyed
: Vue 实例销毁后调用。此时,所有的子实例也都被销毁。
-
激活与停用 (仅在 keep-alive 组件中有效):
activated
: 被包裹的组件作为活动组件时调用。deactivated
: 被包裹的组件停用时调用。
-
错误处理:
errorCaptured
: 当捕获一个来自子孙组件的错误时被调用。此钩子接收三个参数:错误对象、发生错误的组件实例以及一个字符串,其中包含了错误来源。
了解这些生命周期钩子可以帮助你更好地理解和利用 Vue,在合适的时机进行数据处理、DOM 操作或清理工作。
如果有一个父子两层的嵌套组件,这些函数的调用顺序是怎样的
对于一个简单的父子关系的嵌套组件,以下是生命周期钩子的调用顺序:
-
创建阶段:
- 父组件
beforeCreate
- 父组件
created
- 父组件
beforeMount
- 子组件
beforeCreate
- 子组件
created
- 子组件
beforeMount
- 子组件
mounted
- 父组件
mounted
- 父组件
-
更新阶段 (当数据发生变化时):
- 父组件
beforeUpdate
- 子组件
beforeUpdate
- 子组件
updated
- 父组件
updated
- 父组件
-
销毁阶段:
- 父组件
beforeDestroy
- 子组件
beforeDestroy
- 子组件
destroyed
- 父组件
destroyed
- 父组件
这种顺序保证了父组件的初始化或更新不会被其子组件的状态所干扰,而且在销毁时,子组件会先于父组件被完全销毁,避免了可能的依赖关系导致的问题。