Vue生命周期概述

本文详细介绍了Vue.js中的组件生命周期,包括创建、挂载、更新和销毁四个主要阶段,并解释了每个阶段对应的钩子函数的作用及应用场景。
![生命周期](https://img-blog.csdnimg.cn/eff0fc7d178a463cab20f9525b3ee25d.png#pic_center)

怀胎-出生-成长-入土
儿童时期,青年时期,成年,老年

  在不同的阶段可以做不同事情 (有些事件只能在某个阶段做才合理)

  其实就是描述的是vue组件的生命周期

  描述的组件实例、虚拟dom、真实dom的关系

  分4个阶段:  (8个钩子,也是组件实例的选项)



beforeCreate( ) // 创建前,此时组件实例未创建,不可以使用data,虚拟DOM未创建,真实DOM未渲染

created( ) // 创建后,组件实例已创建,可以使用data,但是虚拟DOM未创建,真实DOM未渲染

beforeMount( ) // 挂载前,组件实例已创建,可以使用data,但是虚拟DOM未创建,真实DOM未渲染

mounted( ) // 挂载后,组件实例已创建,可以使用data,虚拟DOM创建,真实DOM渲染

beforeUpdete( ) // 更新前,组件实例已创建,拿到更新后的数据,更新后的虚拟DOM,真实DOM未更新

updated( ) // 更新后,组件实例已创建,拿到更新后的数据,更新后的虚拟DOM,更新后的真实DOM

beforeUnmount( ) // 销毁前

Unmounted( ) // 销毁后


  创建前/后 - 挂载前后   -  更新前后  - 销毁前/后 

  beforeCreate

  created

  beforeMount

  mounted

  -- 以上4钩子,在组件创建的时候会依次执行

​    场景: 

​      某个页面一打开的时候,就要去请求数据然后显示出来

​      在vue开发中,只要把请求到的数据,赋值给data, 那么页面显示出来了

​        这时候就要选择一个生命周期的钩子去做请求操作

​        created  beforeMount  mounted 这三个都可以

​        但是建议在mounted上做:  此时整个实例,虚拟dom都是完整的了

​        所以mounted这个生命周期钩子,使用频率肯能会比较频繁

  当组件有更新的时候,就会触发更新阶段的钩子

  beforeUpdate

  updated

  vue的其中一个特点就是虚拟dom, 它的作用就是减少真实dom的操作(比较耗性能)
### Vue 生命周期函数面试题及相关知识点 Vue生命周期函数是面试中经常被问到的重要知识点之一,以下是对 Vue 生命周期函数的详细解析以及相关的面试题整理。 #### 1. Vue 生命周期函数概述 Vue 实例从创建到销毁的过程中会经历一系列的生命周期钩子。这些钩子函数允许开发者在特定的时间点执行代码。以下是 Vue生命周期钩子及其作用[^2]: - **beforeCreate**:实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前调用。 - **created**:实例已完成数据观测、属性和方法的运算,但尚未挂载到 DOM 上。 - **beforeMount**:模板编译/渲染完成,但尚未挂载到页面上。 - **mounted**:实例已经挂载到 DOM 上,此时可以访问 DOM 元素。 - **beforeUpdate**:数据更新时调用,发生在虚拟 DOM 打补丁之前。 - **updated**:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。 - **beforeDestroy**(Vue 2)或 **beforeUnmount**(Vue 3):实例销毁之前调用。在这一步,实例仍然完全可用。 - **destroyed**(Vue 2)或 **unmounted**(Vue 3):Vue 实例销毁后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。 #### 2. 面试题示例 - **问题 1**:`created` 和 `mounted` 的区别是什么? - **答案**:`created` 在实例创建完成后调用,此时可以访问到 data 和 methods,但尚未挂载到 DOM 上;`mounted` 则是在实例挂载到 DOM 后调用,此时可以操作 DOM 元素[^2]。 - **问题 2**:为什么不能在 `watch` 中直接修改被监听的数据? - **答案**:如果在 `watch` 中直接修改被监听的数据,可能会导致无限循环触发 `watch`,从而陷入死循环。因此,建议在 `watch` 中只执行副作用逻辑,而不直接修改数据。 - **问题 3**:在使用 `<keep-alive>` 缓存组件时,`created` 和 `activated` 的区别是什么? - **答案**:当组件被缓存时,`created` 不会被重复调用,而 `activated` 会在每次组件被激活时调用。因此,`activated` 更适合用于处理缓存组件的状态恢复逻辑[^2]。 #### 3. Vue 3 中的生命周期变化 Vue 3 对生命周期函数进行了部分调整,主要体现在命名的变化上。以下是 Vue 3 中的生命周期钩子与 Vue 2 的对应关系[^5]: | Vue 2 | Vue 3 | |---------------------|-----------------------| | beforeCreate | setup | | created | setup | | beforeMount | onBeforeMount | | mounted | onMounted | | beforeUpdate | onBeforeUpdate | | updated | onUpdated | | beforeDestroy | onBeforeUnmount | | destroyed | onUnmounted | 此外,Vue 3 引入了 Composition API,通过 `setup` 函数可以在更灵活的上下文中使用生命周期钩子。 #### 4. 示例代码 以下是一个简单的 Vue 3 示例,展示如何使用新的生命周期钩子: ```javascript import { onMounted, onUnmounted } from 'vue'; export default { setup() { onMounted(() => { console.log('Component has been mounted'); }); onUnmounted(() => { console.log('Component has been unmounted'); }); return {}; } }; ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抬头第一眼,是天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值