vue3生命周期

Vue3的生命周期包括初次加载、更新、卸载阶段的多个钩子函数,如beforeCreate、created、beforeMount等。在页面关闭时不一定会执行卸载钩子,可能需要借助window.onunload事件。对于响应式数据,只有应用到模板上的才会触发更新。基础数据类型的props变化总会触发更新,而对象则区分替换和属性修改的情况。同时,Vue3中生命周期可通过组合式API在setup中引入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,生命周期

初次加载:
1.setup 创建:组件创建前和创建后执行,包含了beforeCreatecreated
2.beforeMount 挂载前:组件挂载前执行
3.mounted 挂载后:组件挂载后执行

更新:
1.beforeUpdated 更新前执行
2.updated 更新完成后执行

卸载:
1.beforeUnmount 卸载前执行
2.unmounted 卸载后执行

(当直接单击浏览器页签关闭页面时,页面的beforeUnmountunmounted好像不执行,这时需要使用window.onunload事件来处理业务 以上为个人开发时发现,在网上没有找到资料支持

异常:
1.errorCaptured 异常捕捉

keepalive专属
1.actived 组件激活时执行,第一加载也会执行
2.deactived 组件失活时执行,组件卸载时也会执行

二,选项式api

1.在vue3中,所有生命周期都可以在setup中以组合式api引入,使用是在前面加一个on

2.引入的生命周期是一个函数,传入一个函数代表执行函数

import { onMounted } from 'vue';

onMounted(()=>{
	console.log('component mounted')
})

二,注意事项

1.vue的响应式思想是,只有应用到模板上的响应式数据(除了props)发生了修改,才会触发更新生命周期,对于没有应用到模板上的响应式数据,即使发生修改,也不会触发更新周期。

2.对于组件的props,要分两种情况讨论

(1)当是基础数据时,只要发生改变,不管是否应用到组件上,都会执行更新生命周期

(2)当是对象时,又可分为两种情况

①替换整个对象(引用地址发生改变),会执行更新生命周期,
②更新对象的某个属性时,当属性被应用到模板上,会执行更新生命周期,没有被引用到模板上,不会执行更新生命周期。

### Vue3 中 `onMounted` 和 `onBeforeUnmount` 生命周期钩子的用法 在 Vue 3 组合式 API (Composition API) 中,组件生命周期可以通过组合式的函数来访问。这使得开发者可以更灵活地管理逻辑关注点分离。 #### 使用 `onMounted` 当希望某些操作仅在组件挂载完成后执行时,可利用 `onMounted` 钩子。此钩子会在实例被挂载之后立即调用,在这个阶段模板已经被解析并应用到 DOM 上[^1]。 ```javascript import { defineComponent, onMounted } from 'vue' export default defineComponent({ name: 'MyComponent', setup() { onMounted(() => { console.log('The component has been mounted.') // 可在此处发起网络请求获取数据或初始化第三方库等 fetch('/api/data') .then(response => response.json()) .then(data => { console.log('Fetched data:', data); }); }) return {} } }) ``` #### 使用 `onBeforeUnmount` 对于那些需要清理工作的情况,比如取消定时器、移除事件监听器或其他资源释放的任务,则可以在卸载前通过 `onBeforeUnmount` 来完成这些处理。它将在组件即将销毁之前触发。 ```javascript import { ref, onMounted, onBeforeUnmount } from 'vue' export default { setup() { let timerId; onMounted(() => { timerId = setInterval(() => { console.log('Timer tick'); }, 1000); window.addEventListener('resize', handleResize); }); function handleResize(event) { console.log(`Window resized to ${event.target.innerWidth}x${event.target.innerHeight}`); } onBeforeUnmount(() => { clearInterval(timerId); // 清理计时器 window.removeEventListener('resize', handleResize); // 移除窗口大小改变监听器 }); return {}; }, } ``` 这两个钩子提供了一种方式让开发人员能够更好地控制何时以及如何响应应用程序中的不同状态变化,从而编写更加高效的应用程序代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值