生命周期的妙用——Vue3


)

从Vue2到Vue3👾

Vue 3 保留了大多数 Vue 2 的生命周期钩子,同时引入了组合 API 中的生命周期钩子。以下是 Vue 3 中的生命周期钩子:
在这里插入图片描述

不只onMounted

虽然很多新手开发者主要使用 mounted 钩子,但其他钩子在特定场景下也有其独特的用途。理解和善用这些钩子可以让你编写出更加高效和易于维护的 Vue.js 应用。

beforeCreate -> setup 中的逻辑:实例初始化之后,数据观测和事件配置之前。由于 setup 作为新的初始化阶段,一些原本在 beforeCreate 中的逻辑可以移到 setup 中。
用途:在组件实例初始化之后,数据观测和事件配置之前调用。此时还没有对 data、computed、watchers 等做初始化。
妙用:几乎不使用,因为在这个阶段无法访问组件中的任何属性或方法。可以用于某些高级调试或插件开发场景。

created -> setup 中的逻辑:实例已经创建完成,但未挂载到 DOM 上。大多数 created 中的逻辑可以移到 setup 中。
用途:实例已经创建完成,完成数据观测和事件配置,但还没有挂载到 DOM 上。
妙用:
进行 API 请求,初始化数据。
设置定时器(setInterval、setTimeout)。
访问和修改实例的 data、computed、methods。
订阅事件(event bus)。

beforeMount -> onBeforeMount:在挂载开始之前调用,相关的 render 函数首次被调用。
beforeMount
用途:在挂载开始之前调用,相关的 render 函数首次被调用。
妙用:很少单独使用,因为数据已经绑定但尚未生成 DOM。可以在 render 前做一些准备工作。

mounted -> onMounted:el 被新创建的 vm.$el 替换,并挂载到实例上。
用途:组件被挂载到 DOM 上后调用。
妙用:
操作 DOM 元素(获取元素高度、宽度,初始化第三方库)。
开始动画。
进行数据交互(监听 DOM 事件)

beforeUpdate -> onBeforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
用途:在数据更新后、重新渲染 DOM 之前调用。
妙用:
在数据更新前执行一些操作,例如保存当前状态。
对比新旧数据,做一些预处理。

updated -> onUpdated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。
用途:由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。
妙用:
操作更新后的 DOM。
触发其他组件或外部 API 调用。

activated -> onActivated:keep-alive 组件激活时调用。
用途:keep-alive 组件激活时调用。
妙用:
恢复组件状态。
开始需要在激活状态下执行的任务(例如重启定时器)。

deactivated -> onDeactivated:keep-alive 组件停用时调用。
用途:keep-alive 组件停用时调用。
妙用:
暂停或清理需要在停用状态下停止的任务(例如清除定时器)。

beforeDestroy -> onBeforeUnmount:实例销毁之前调用,实例仍然完全可用。
用途:组件实例销毁之前调用,此时实例仍然完全可用。
妙用:
清除定时器。
取消订阅事件。
清理所有非自动清理的资源。

destroyed -> onUnmounted:实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。
用途:组件实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。
妙用:
完全清理组件相关的所有内容,确保不再保留任何引用。
可以进行一些日志记录或通知操作。

Vue 3 新增的生命周期钩子
onRenderTracked:响应式依赖被追踪时调用,用于调试。
onRenderTriggered:响应式依赖变化导致组件重新渲染时调用,用于调试。

又见keep-alive

keep-alive 是 Vue.js 提供的一个内置组件,用于缓存不活动的组件实例。它通常用于 或 之类的动态组件上,以避免重复创建和销毁组件,提升性能。

主要属性

keep-alive 组件提供了几个有用的属性:
include:字符串或正则表达式。只有匹配的组件会被缓存。
exclude:字符串或正则表达式。匹配的组件不会被缓存。
max:数字。缓存组件实例的最大数量。

被你包裹

当组件被 keep-alive 包裹时,它会多出两个特有的生命周期钩子 onActivatedonDeactivated

onActivated:当组件从缓存中激活时调用。可以在此钩子中执行一些需要在组件显示时执行的操作。
onDeactivated:当组件被缓存起来时调用。可以在此钩子中执行一些需要在组件隐藏时执行的操作。

应用场景

  1. 路由组件缓存:在使用 Vue Router 时,通过 keep-alive 缓存路由组件,可以避免路由切换时组件的销毁和重建,提升性能。
<template>
  <keep-alive>
    <router-view></router-view>
  </keep-alive>
</template>

  1. 多标签页切换:在实现类似浏览器多标签页切换的功能时,通过 keep-alive 可以缓存已经打开的标签页,避免重复加载和初始化。
  2. 表单数据保存:在表单组件切换时,通过 keep-alive 可以保留用户输入的数据,避免重复输入。

值得注意的是🤖

  1. onActivated 在组件挂载时也会调用,并且 onDeactivated 在组件卸载时也会调用。
  2. 这两个钩子不仅适用于 < KeepAlive > 缓存的根组件,也适用于缓存树中的后代组件。
  3. 由于 keep-alive 会缓存组件实例,因此组件的状态(如 data 和 computed)在组件被缓存和激活时会保持不变。这在某些场景下可能需要特别处理。
  4. 虽然 keep-alive 可以提升性能,但如果缓存的组件数量过多,可能会占用较多的内存资源。因此需要合理设置 max 属性。
Vue3与Vue2在生命周期上有一些显著的变化。Vue3中的生命周期函数相较于Vue2有所简化和优化,旨在提高性能和开发体验。 首先,Vue3中去掉了Vue2中的beforeCreate和created两个生命周期钩子函数。这是因为在Vue3中引入了Composition API,允许我们使用setup函数来替代beforeCreate和created的功能。setup函数会在组件实例被创建之前调用,可以用来进行变量的初始化和副作用的处理。 其次,Vue3中引入了一个新的生命周期钩子函数——beforeMount。在组件即将被挂载到DOM之前,beforeMount函数会被调用。这个阶段可以用来进行一些准备工作,比如请求数据或者绑定事件。 接下来是mount阶段,即挂载阶段,此阶段对应Vue2中的mounted生命周期函数。在mount阶段,组件的template被编译成真实的DOM元素,并插入到页面中。我们可以在mount函数中执行一些与DOM相关的操作。 接着是update阶段。在Vue2中,我们可以使用beforeUpdate和updated这两个生命周期钩子函数来监听数据的变化,并在数据更新后执行相应的操作。而在Vue3中,我们可以使用watchEffect函数来实现相同的效果。watchEffect会监听组件中响应式属性的变化,并自动执行相应的回调函数。 最后是unmount阶段,即组件被卸载的阶段。在Vue3中,我们可以使用onUnmounted函数来代替Vue2中的beforeDestroy和destroyed生命周期函数。onUnmounted会在组件被销毁之前执行,我们可以在这个时候做一些清理工作,比如取消订阅或者清除定时器。 总的来说,Vue3中的生命周期函数进行了一些优化和简化,提高了性能和开发体验。通过引入Composition API和watchEffect函数,我们可以更加灵活地处理组件的生命周期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值