当前位置: 首页 > news >正文

Vue 生命周期

目录

  • Vue 生命周期
    • 背景介绍
    • Vue2 生命周期
      • 1. 生命周期钩子
      • 2. 生命周期图示
    • Vue3 生命周期
      • 1. 组合式 API 中的生命周期
      • 2. 生命周期钩子对应关系
    • 常见问题
      • 1. created 和 mounted 的区别
      • 2. 异步数据获取的时机
    • 最佳实践
    • 面试题


Vue 生命周期

背景介绍

Vue 的生命周期是指 Vue 实例从创建到销毁的整个过程。理解 Vue 的生命周期对于开发高质量的 Vue 应用至关重要,它帮助我们更好地控制组件的创建、更新和销毁过程,以及在合适的时机执行相应的操作。

Vue2 生命周期

1. 生命周期钩子

export default {beforeCreate() {// 实例初始化之后,数据观测和事件配置之前console.log('beforeCreate')},created() {// 实例创建完成后被调用// 数据观测、属性和方法的运算,watch/event 事件回调console.log('created')},beforeMount() {// 挂载开始之前被调用// 相关的 render 函数首次被调用console.log('beforeMount')},mounted() {// 挂载到实例上去之后调用// el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子console.log('mounted')},beforeUpdate() {// 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前console.log('beforeUpdate')},updated() {// 数据更新之后调用,发生在虚拟 DOM 重新渲染和打补丁之后console.log('updated')},beforeDestroy() {// 实例销毁之前调用console.log('beforeDestroy')},destroyed() {// 实例销毁后调用console.log('destroyed')},
}

2. 生命周期图示

创建 -> 挂载 -> 更新 -> 销毁

Vue3 生命周期

1. 组合式 API 中的生命周期

import { onMounted, onUpdated, onUnmounted } from 'vue'export default {setup() {onMounted(() => {console.log('组件已挂载')})onUpdated(() => {console.log('组件已更新')})onUnmounted(() => {console.log('组件已卸载')})},
}

2. 生命周期钩子对应关系

Vue2 选项式 APIVue3 组合式 API
beforeCreatesetup()
createdsetup()
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeDestroyonBeforeUnmount
destroyedonUnmounted

常见问题

1. created 和 mounted 的区别

  • created: 在实例创建完成后被调用,此时已完成数据观测、属性和方法的运算,但尚未挂载到 DOM
  • mounted: 在实例挂载到 DOM 后调用,此时可以访问到 DOM 元素

2. 异步数据获取的时机

// 推荐在 created 中进行异步数据获取
export default {async created() {// 尽早开始数据获取const data = await fetchData()this.data = data},
}

最佳实践

  1. 数据初始化

    • created 中进行数据初始化
    • 避免在 mounted 中进行数据初始化,除非需要访问 DOM
  2. DOM 操作

    • mounted 中进行 DOM 操作
    • 使用 nextTick 确保 DOM 更新完成
  3. 资源清理

    • beforeDestroyonBeforeUnmount 中清理定时器、事件监听等资源

面试题

  1. Vue 的生命周期有哪些?分别在什么时候调用?
// 答案要点:
// 1. 创建阶段:beforeCreate、created
// 2. 挂载阶段:beforeMount、mounted
// 3. 更新阶段:beforeUpdate、updated
// 4. 销毁阶段:beforeDestroy、destroyed
  1. Vue2 和 Vue3 的生命周期有什么区别?
// 答案要点:
// 1. Vue3 使用组合式 API,生命周期钩子需要导入
// 2. 命名变化:beforeDestroy -> onBeforeUnmount
// 3. setup 函数替代了 beforeCreate 和 created
  1. 为什么要在 created 而不是 mounted 中发起数据请求?
// 答案要点:
// 1. 更早获取数据,减少页面加载时间
// 2. mounted 时 DOM 已经渲染,可能导致页面闪烁
// 3. 服务端渲染时 mounted 不会执行

相关文章:

  • 使用argocd部署nginx
  • 大厂Java技术面试实录:从基础到架构,谢飞机的面试之旅
  • 测试:AWS SDK for JavaScript v2 迁移到 v3
  • 【开发常用命令】:服务器与本地之间的数据传输
  • 新疆大学具身导航新范式!DOPE:基于双重对象感知增强网络的视觉语言导航
  • Python打卡第52天
  • 破解关键领域软件测试“三重难题”:安全、复杂性、保密性
  • 第三章支线七 ·路由边境 · 多页世界的穿梭之术
  • 考研复试C语言基础
  • 常见的UDS服务标识符与UDS刷写流程
  • 指针01 day13
  • mapstruct中的@Mapper注解详解
  • Linux检验库是否安装成功
  • 【Linux手册】从「程序」到「进程」:计算机世界的运行机制
  • vue中的doSave()方法
  • sherpa-onnx开源语音处理框架研究报告:从技术解析到应用实践
  • 134. Gas Station
  • 泛微OAe9-自定义资源看板
  • HALCON第一讲->数据结构、语法规则与思路
  • 算法学习笔记:2.大根堆算法——数据流的中位数​​or最后一块石头的重量
  • 满屏滚动网站咋做/google框架三件套
  • 网站美工做图/企业网站网页设计
  • 济南营销型网站/网络推广吧
  • 郑州的做网站公司哪家好/云seo关键词排名优化软件
  • 合山网站建设/如何建造自己的网站
  • 网站店招用什么软件做的/网络自动推广软件