钩子是 Vue.js 生命周期中的特定方法,它们在组件的不同阶段被调用。这些方法被称为“钩子”是因为它们“钩入”了 Vue.js 的生命周期,允许开发者在组件创建、更新、销毁等关键点执行自定义代码。
在 Vue.js 中,钩子方法包括:
- 创建阶段:
-
beforeCreate
:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用,这时候this
指向新建的实例。由于这时候,组件实例还没有初始化,所以this
对象上还没有对 data、methods、computed、watch 等选项进行处理。 -
created
:实例已经创建完成,数据观测 (data observer) 和 event/watcher 事件配置都已完成,但是 DOM 还没有创建。从这里可以开始访问组件的数据 (data option),但 el还是undefined。2.∗∗挂载阶段∗∗:−‘beforeMount‘:在模板编译成虚拟DOM后,真实DOM渲染之前被调用。如果模板中有‘el‘指定挂载节点,那么‘this.el还是undefined。2.∗∗挂载阶段∗∗:−‘beforeMount‘:在模板编译成虚拟DOM后,真实DOM渲染之前被调用。如果模板中有‘el‘指定挂载节点,那么‘this.el` 就是可以访问的。 -
mounted
:挂载完成后被调用,这时候已经生成了真实的 DOM,组件已经挂载到页面上,可以访问 DOM 节点。
- 更新阶段:
-
beforeUpdate
:数据更新之前被调用,发生在虚拟 DOM 重新渲染和打补丁之前。由于用户可能会在这个钩子中更改状态,所以这个钩子在更新过程中可能会被调用多次。 -
updated
:组件更新 DOM 并完成虚拟 DOM 的 diff 过程后被调用。这个阶段可以访问最新的 DOM,但是要避免在此阶段更改状态,因为这可能会触发另一次更新。
- 销毁阶段:
-
beforeDestroy
:实例销毁之前被调用,这时候仍然可以访问和操作组件的数据和方法。 -
destroyed
:实例销毁之后被调用,这时候组件已经从 DOM 中移除,所有的事件监听器已经被移除,所有的子组件也已经被销毁。
- 激活与停用(仅限于包含
<keep-alive>
的组件):
-
activated
:keep-alive 组件激活时调用。 -
deactivated
:keep-alive 组件停用时调用。
钩子方法对于在 Vue.js 应用中执行特定操作非常有用,例如:
-
在组件创建时获取数据或初始化状态。
-
在组件挂载时操作 DOM 或与外部库交互。
-
在组件更新时执行动画或处理数据变化。
-
在组件销毁时清理资源,如移除事件监听器或取消 AJAX 请求。
理解 Vue.js 生命周期和钩子方法的调用顺序对于编写可维护和高效的 Vue.js 应用程序至关重要。通过在适当的钩子中执行操作,可以确保代码在正确的时机执行,避免潜在的问题。
至于为什么叫做“钩子”,这是因为这些方法“钩入”了 Vue.js 的内部生命周期,允许开发者在关键点插入自定义行为。这与现实生活中的钩子有些类似,钩子可以挂住或捕获某些东西,而在 Vue.js 中,钩子方法捕获了生命周期中的特定时刻。