vue3生命周期钩子

本文详细介绍了Vue.js中的各种生命周期钩子,包括挂载、更新、卸载前后的回调函数,以及在响应式状态变化、路由切换、DOM操作等场景下的行为,帮助开发者理解和管理组件的生命周期过程。
摘要由CSDN通过智能技术生成
<script setup lang="ts">
import { RouterLink } from 'vue-router'
import {
  ref,
  onMounted,
  onUpdated,
  onUnmounted,
  onBeforeMount,
  onBeforeUpdate,
  onBeforeUnmount,
  onErrorCaptured,
  onRenderTracked,
  onRenderTriggered,
  onActivated,
  onDeactivated,
  onServerPrefetch
} from 'vue'


const el = ref()
const count = ref<number>(0)
const num = ref<number>(0)


function addNum() {
  num.value++
}


/**
 * 注册一个回调函数,在组件挂载完成后执行。
 */
onMounted(() => {
  console.log(el.value, 'onMounted')
})


/**
 * 注册一个回调函数,在组件因为响应式状态变更而更新其 DOM 树之后调用。
 *
 * 父组件的更新钩子将在其子组件的更新钩子之后调用。
 * 这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的,因为多个状态变更可以在同一个渲染周期中批量执行(考虑到性能因素)。如果你需要在某个特定的状态更改后访问更新后的 DOM,请使用 nextTick() 作为替代。
 */
onUpdated(() => {
  console.log((document.getElementById('count') as HTMLElement).textContent, 'onUpdated')
})


/**
 * 注册一个回调函数,在组件实例被卸载之后调用。
 * 一个组件在以下情况下被视为已卸载:
 * 其所有子组件都已经被卸载。
 * 所有相关的响应式作用 (渲染作用以及 setup() 时创建的计算属性和侦听器) 都已经停止。
 * 可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。
 */
onUnmounted(() => {
  console.log('组件实例被卸载', 'onUnmounted')
})


/**
 * 注册一个钩子,在组件被挂载之前被调用。
 * 当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。
 * 主要用于在组件真实挂载到页面之前执行那些不依赖于真实 DOM 的准备工作,为组件的顺利渲染和后续交互打下基础。
 */
onBeforeMount(() => {
  console.log('组件被挂载之前---onBeforeMount')
})


/**
 * 注册一个钩子,在组件即将因为响应式状态变更而更新其 DOM 树之前调用。
 */
onBeforeUpdate(() => {
  console.log('在组件即将因为响应式状态变更而更新其 DOM 树之前调用---onBeforeUpdate')
})


/**
 * 注册一个钩子,在组件实例被卸载之前调用。
 * 当这个钩子被调用时,组件实例依然还保有全部的功能。
 */
onBeforeUnmount(() => {
  console.log('组件实例被卸载之前调用---onBeforeUnmount')
})


/**
 * 注册一个钩子,在捕获了后代组件传递的错误时调用。
 */
onErrorCaptured((err) => {
  console.log(err)
})


/**
 * 注册一个调试钩子,当组件渲染过程中追踪到响应式依赖时调用。
 * 这个钩子仅在开发模式下可用,且在服务器端渲染期间不会被调用。
 */
onRenderTracked((event) => {
  console.log(event)
})


/**
 * 注册一个调试钩子,当响应式依赖的变更触发了组件渲染时调用。
 * 这个钩子仅在开发模式下可用,且在服务器端渲染期间不会被调用
 */
onRenderTriggered((event) => {
  console.log(event)
})


/**
 * 注册一个回调函数,若组件实例是 <KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用。
 */
onActivated(() => {
  console.log('插入')
})


/**
 * 注册一个回调函数,若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。
 */
onDeactivated(() => {
  console.log('移除')
})
</script>


<template>
  <div>
    <div ref="el"></div>
    <button id="count" @click="count++">{{ count }}</button>
    <RouterLink to="/">跳转页面 组件实例被卸载</RouterLink>
    <button @click="addNum">{{ num }}</button>
  </div>
</template>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值