Vue 的生命周期是指 Vue 实例从创建到销毁的过程,总共分为八个阶段:创建前/后,载入前/后,更新前/后,销毁前/销毁后。每个阶段对应一个特定的钩子函数,这些钩子函数允许我们在 Vue 实例的不同状态下添加自定义代码。
以下是 Vue 的生命周期钩子函数的详细解释:
- beforeCreate(创建前)
在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。此时,组件的配置对象还未被创建,不能访问到 data、computed、watch、methods 上的方法和数据。
- created(创建后)
在这个阶段已经完成数据观测等初始化工作,但是尚未挂载 DOM,$el 属性目前不可见。此时可以访问到 data、computed 属性,但不能访问到 DOM。
- beforeMount(载入前)
在挂载开始之前被调用:相关的 render 函数首次被调用。此时虚拟 DOM 已经创建完成,即将开始渲染,但此时还没有挂载到页面上,所以无法看到渲染后的结果。
- mounted(载入后)
el 被新创建的 vm.el替换,并挂载到实例上去之后调用该钩子。如果root实例挂载了一个in−document元素,当mounted被调用时vm.el 也在文档内。此时,组件已经挂载到页面上,可以访问到 DOM 元素。
- beforeUpdate(更新前)
数据更新时调用,发生在虚拟 DOM 打补丁之前。可以在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
- updated(更新后)
由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
- beforeDestroy(销毁前)
实例销毁之前调用。在这一步,实例仍然完全可用。此时,Vue 实例指示的所有东西仍然可用,比如属性、方法、DOM 元素等。这是进行销毁前清理工作(比如:移除事件监听器、销毁定时器、解绑全局状态等)的好时机。
- destroyed(销毁后)
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑,所有的事件监听器都会被移除,所有的子实例也会被销毁。此时,组件已被完全销毁,其所有的数据和事件监听器都已被移除,无法再访问。
通过合理利用这些生命周期钩子,我们可以更好地控制 Vue 组件的行为,并在不同的阶段执行特定的操作。