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

【前端高频面试题--Vue生命周期篇】

🚀 作者 :“码上有前”
🚀 文章简介 :前端高频面试题
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

前端高频面试题--Vue生命周期篇

  • Vue的生命周期
  • Vue子组件和父组件执行顺序
  • 在哪个生命周期请求异步数据
  • keep-alive 中的生命周期哪些

Vue的生命周期

Vue.js 的生命周期是指在组件创建、挂载、更新和销毁过程中触发的一系列钩子函数。这些钩子函数可以让我们在特定的时刻执行自定义的逻辑。

Vue.js 的生命周期可以分为以下几个阶段:

  1. 创建阶段

    • beforeCreate:在实例被创建之后,但是在数据观测和事件/钩子函数初始化之前调用。此时,组件的数据和方法还未初始化。
    • created:在实例创建完成后调用。此时,组件的数据已经初始化,可以访问 data 中的数据和 methods 中的方法,但尚未挂载到 DOM 上。
  2. 挂载阶段

    • beforeMount:在挂载开始之前被调用。此时,模板已经编译完成,但尚未将模板渲染到真实的 DOM 中。
    • mounted:在挂载完成后被调用。此时,组件已经被挂载到 DOM 上,可以进行 DOM 操作,也可以访问到通过 ref 获取的 DOM 元素。
  3. 更新阶段

    • beforeUpdate:在数据更新之前调用。此时,已经接收到新的数据,但是 DOM 尚未更新。
    • updated:在数据更新完成后调用。此时,组件的数据已经更新,DOM 也已经重新渲染。
  4. 销毁阶段

    • beforeUnmount(Vue 2.x)/ beforeDestroy(Vue 3.x):在实例销毁之前调用。此时,组件实例仍然完全可用。
    • unmounted(Vue 2.x)/ unmounted(Vue 3.x):在实例销毁后调用。此时,组件实例已经被销毁,对应的 DOM 也会被移除。

除了上述的主要生命周期钩子函数外,Vue 还提供了其他一些较少使用的钩子函数,例如 activated(组件被激活时调用)和 deactivated(组件被停用时调用),以及 errorCaptured(捕获组件内部错误)等。

在生命周期函数中,我们可以执行一些初始化操作、发送网络请求、订阅事件、操作 DOM 等。生命周期函数提供了一种管理组件行为的方式,使我们能够在不同的时刻执行相应的逻辑。

需要注意的是,在 Vue 3 中,一些生命周期钩子函数的名称发生了变化,例如 beforeMount 在 Vue 3 中被重命名为 beforeMount,beforeUnmount 取代了 beforeDestroy。这是由于 Vue 3 采用了 Composition API 的新特性,以及对应用程序的性能优化进行了改进。

Vue子组件和父组件执行顺序

在 Vue 中,子组件和父组件的生命周期钩子函数的执行顺序如下:

  1. 父组件:

    • beforeCreate
    • created
    • beforeMount
    • 子组件的 beforeCreate 和 created 钩子函数
    • mounted
    • 子组件的 beforeMount 和 mounted 钩子函数
  2. 子组件:

    • beforeCreate
    • created
    • beforeMount
    • mounted

在父组件的生命周期中,子组件的 beforeCreate 和 created 钩子函数会在父组件的 beforeCreate 和 created 钩子函数之后执行。因为子组件的实例化和初始化是在父组件的 created 钩子函数之后进行的。

在父组件的 beforeMount 和 mounted 钩子函数中,子组件的 beforeMount 和 mounted 钩子函数会在父组件的 beforeMount 和 mounted 钩子函数之后执行。这是因为在父组件的 mount 过程中,会先处理父组件的模板,然后才会处理子组件的模板。

需要注意的是,父组件的 updated 钩子函数会在子组件的 updated 钩子函数之后执行。这是因为在更新过程中,先更新子组件,然后再更新父组件。

总的来说,父组件的生命周期钩子函数会在子组件的生命周期钩子函数之前执行,而在子组件的生命周期钩子函数中,beforeCreate 和 created 钩子函数会在 beforeMount 和 mounted 钩子函数之前执行。这样的顺序确保了父子组件之间的正确初始化和挂载过程。

在哪个生命周期请求异步数据

在 Vue.js 中,常常在组件的 “created” 生命周期钩子函数中请求异步数据。“created” 钩子函数是在组件实例创建完成之后立即被调用的,并且此时组件的数据已经初始化,可以进行异步请求。

在 “created” 钩子函数中请求异步数据的常见做法是使用异步函数(如 axios、fetch 等)或者调用组件自定义的方法来发起请求。通过异步请求获取到的数据可以保存在组件的 data 属性中,从而在模板中进行渲染。

以下是一个示例代码,展示了如何在 Vue 组件的 “created” 钩子函数中请求异步数据:

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">{{ item.title }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: []  // 初始化数据为空数组
    };
  },
  created() {
    this.fetchData(); // 在 created 钩子函数中调用 fetchData 方法
  },
  methods: {
    fetchData() {
      // 发起异步请求
      // 假设使用 axios 库进行请求
      axios.get('https://api.example.com/items')
        .then(response => {
          this.items = response.data; // 将获取到的数据保存到组件的 data 属性中
        })
        .catch(error => {
          console.error(error);
        });
    }
  }
};
</script>

在上述示例中,我们在 “created” 钩子函数中调用了 “fetchData” 方法来发起异步请求,并将获取到的数据保存在组件的 “items” 数据属性中。这样,当组件被创建后,异步数据会被加载并在模板中进行渲染。

keep-alive 中的生命周期哪些

在 Vue.js 中,使用 <keep-alive> 组件可以将动态组件进行缓存,以避免组件的重复创建和销毁,提高性能。当组件被 <keep-alive> 包裹时,它会有一些特殊的生命周期钩子函数。

以下是 <keep-alive> 组件中的生命周期钩子函数:

  • activated:在被包裹的组件被激活时调用。当组件切换到活跃状态时(从缓存中取出),会触发该钩子函数。
  • deactivated:在被包裹的组件被停用时调用。当组件切换到非活跃状态时(被缓存),会触发该钩子函数。

这两个钩子函数的使用场景如下:

  • activateddeactivated 钩子函数通常用于需要在组件切换时执行一些特定逻辑的场景,例如在组件切换到活跃状态时重新加载数据,或者在组件切换到非活跃状态时清除不必要的资源。

需要注意的是,activateddeactivated 钩子函数只对被 <keep-alive> 包裹的组件生效,对于其他组件不会触发。

以下是示例代码,演示了在 <keep-alive> 组件中使用 activateddeactivated 钩子函数:

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello!',
    };
  },
  activated() {
    console.log('Component activated');
    // 在组件被激活时执行特定逻辑,例如重新加载数据
    this.loadData();
  },
  deactivated() {
    console.log('Component deactivated');
    // 在组件被停用时执行特定逻辑,例如清除资源
    this.clearData();
  },
  methods: {
    loadData() {
      // 加载数据逻辑
    },
    clearData() {
      // 清除资源逻辑
    },
  },
};
</script>

在上述示例中,当组件被 <keep-alive> 包裹时,每当组件被激活或停用时,activateddeactivated 钩子函数会被触发,并执行相应的逻辑。
都看到这了,点个赞吧,嘿嘿🚀


http://www.kler.cn/news/233674.html

相关文章:

  • K8S之运用亲和性设置Pod的调度约束
  • docker实际生产中遇到的问题及解决办法
  • 前端配置了axios.defaults.withCredentials = true,但出现了跨域问题
  • 数据结构——5.5 树与二叉树的应用
  • 【错误文档】This与Here的区别、主系表结构、如何合并两个句子、祈使句结构
  • linux 07 存储管理
  • kali最新最简单安装
  • 社区店选址要素揭秘:人流量与商业潜力的关键
  • 十大排序算法之线性时间非比较类排序
  • 电商小程序05用户注册
  • 吉他学习:C大调第一把位音阶,四四拍曲目练习 小星星,练习的目的
  • Mac OS 取消隔离扩展属性
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-时间管理
  • #vu3# element plus表格的序号字段
  • STM32CubeMX,定时器之定时功能,入门学习,如何设置prescaler,以及timer计算PWM输入捕获方法(重要)
  • C语言笔试题之求出二叉树的最大深度(递归解决)
  • 【MATLAB源码-第138期】基于matlab的D2D蜂窝通信仿真,对比启发式算法,最优化算法和随机算法的性能。
  • Centos7.9安装SQLserver2017数据库
  • 【Make编译控制 01】程序编译与执行
  • 备战蓝桥杯---动态规划(基础3)
  • 虚拟飞控计算机:飞行控制系统验证与优化的利器
  • 汇编语言程序设计(二)十六位汇编框架、子程序与堆栈
  • 小周带你读论文-2之“草履虫都能看懂的Transformer老活儿新整“Attention is all you need(4)
  • 2024年-视觉AI检测的面试题目总结
  • 如何实现视线(目光)的检测与实时跟踪
  • 《CSS 简易速速上手小册》第5章:CSS 动画与过渡(2024 最新版)
  • 【社交电商】带直播电商功能,可以DIY前端,可以H5和小程序一般商城常用功能齐全
  • C++Linux网络编程day02:select模型
  • 基于完全二叉树实现线段树-- [爆竹声中一岁除,线段树下苦踌躇]
  • 风行智能电视G32Y 强制刷机升级方法,附刷机升级数据MstarUpgrade.bin