Vue开发系列——Vue 生命周期钩子 及常见知识点

目录

一、生命周期钩子简介

[二、 Vue 组件中常用的生命周期钩子](#二、 Vue 组件中常用的生命周期钩子)

beforeCreate

created

beforeMount

mounted

beforeUpdate

updated

beforeDestroy

destroyed

三、Vue嵌套组件生命周期执行顺序

四、Vue生命周期常见知识点


一、生命周期钩子简介

Vue的生命周期:Vue实例从创建到销毁的过程称为生命周期,包括初始化数据、编译模板、挂载DOM、渲染、更新和销毁等一系列过程‌

Vue.js 提供了生命周期钩子(Lifecycle Hooks),允许开发者在组件的不同阶段执行代码。

✔️这些生命周期钩子提供了对组件状态变化的响应能力,例如在组件创建前后、渲染前后、更新前后以及销毁前后等时刻执行特定的逻辑。

二、 Vue 组件中常用的生命周期钩子

生命周期:

  • 初始化
  • 挂载
  • 更新
  • 销毁

beforeCreate

  • 在实例初始化之后、数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

  • 示例:在这个阶段,组件的 data 和 methods 等尚未初始化

    beforeCreate() {
    console.log('组件实例刚被创建,组件的 data 和 methods 等尚未初始化');
    }

created

  • 在实例创建完成后被立即调用。在这一步,实例已完成以下配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

  • 示例:在这个阶段,可以执行如 API 调用的操作。

    created() {
    console.log('组件实例已创建,属性已绑定,但DOM还未生成,$el属性还不行用');
    this.fetchData(); // 例如,从API获取数据
    }

beforeMount

  • 在挂载开始之前被调用:相关的 render 函数首次被调用。

  • 示例:在这个阶段,可以访问到 DOM,但不能修改它(因为尚未挂载)

    beforeMount() {
    console.log('模板和挂载前的钩子,可以访问到 DOM,但不能修改它');
    }

mounted

  • el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载了一个文档内元素,当 mounted 被调用时文档内元素已经被插入。

  • 示例:在这个阶段,可以访问和操作 DOM

    mounted() {
    console.log('可以访问和操作 DOM');
    this.$nextTick(function () {
    // DOM 更新后的回调函数
    });
    }

beforeUpdate

  • 数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

  • 示例:在这个阶段,可以获取更新前的 DOM 状态

    beforeUpdate() {
    console.log('数据更新之前调用,发生在虚拟DOM打补丁之前');
    }

updated

  • 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用这个钩子。当这个钩子被调用时,组件 DOM 已经更新。

  • 示例:在这个阶段,可以执行依赖于 DOM 的操作。

    updated() {
    console.log('由于数据更改导致的虚拟DOM重新渲染和打补丁之后会调用这个钩子');
    }

beforeDestroy

  • 在实例销毁之前调用。在这一步,实例仍然完全可用。

  • 示例:在这个阶段,可以执行清理操作,如定时器清除等。

    beforeDestroy() {
    console.log('实例销毁前调用');
    clearInterval(this.myInterval); // 清除定时器等清理工作
    }

destroyed

  • 在 Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也会被销毁。

  • 示例:在这个阶段,执行最终的清理工作。

    destroyed() {
    console.log('Vue 实例销毁后调用');
    }

三、Vue嵌套组件生命周期执行顺序

四、Vue生命周期常见知识点

**✔️第一次页面加载会触发哪几个钩子?**‌

第一次页面加载会触发beforeCreatecreatedbeforeMountmounted这几个钩子‌**✔️DOM渲染在哪个周期中完成?** ‌DOM渲染在mounted周期中完成‌

**✔️每个生命周期阶段具体适合哪些场景?**‌

  • beforeCreatecreated:适合初始化操作,如设置全局变量。
  • beforeMountmounted:适合DOM操作,如挂载DOM元素。
  • beforeUpdateupdated:适合数据变化后的操作,如更新DOM。
  • beforeDestroydestroyed:适合清理资源,如移除事件监听器‌

✔️父子组件的生命周期执行顺序是什么?

父组件的生命周期先于子组件执行,子组件挂载完成后,父组件才会挂载‌

✔️Vue 解决了什么问题

①虚拟 dom:dom 操作时非常耗性能的,不再使用原生的 dom 操作节点,极大的解放 dom 操作,但具体操作的还是 dom,不过是换了一种方式。

② 视图、数据、结构分离:使数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作。

③ 组件化:把一个单页应用中的各种模块拆分到一个一个单独的组件中,便于开发,以及后期的维护

④只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。Vue.js 是一个轻巧、高性能、可组件化的 MVVM 库,同时拥有非常容易上手的 API。

✔️watch、computed 和 methods 的区别

  • methods 在重新渲染的时候每次都会被重新的调用;
  • computed 是自动监听依赖值的变化,从而动态返回内容,主要目的是简化模板内的复杂运算。所以区别来源于用法,只是需要动态值,那就用 computed ;需要知道值的改变后执行业务逻辑,才用 watch。
  • watch 也可以影响数据的变化,当绑定的数据方法变化时触发响应的函数,需要在数据变化时执行异步或开销较大的操作时使用 watch

✔️Vue 中 key 值的作用

key 的作用主要是为了高效的更新虚拟 DOM。通过给每个元素或组件一个唯一的key,Vue能够更准确地判断哪些元素需要被重用、添加或删除。因为通过key,Vue可以准确地识别哪些元素被添加、删除或重新排序,从而进行正确的更新‌。

当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用"就地复用"策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。

✔️vue 的指令

⑴v-bind:给元素绑定属性

⑵v-on:给元素绑定事件

⑶v-html:给元素绑定数据,且该指令可以解析 html 标签

⑷v-text:给元素绑定数据,不解析标签

⑸v-model:数据双向绑定

⑹v-for:遍历数组

⑺v-if:条件渲染指令,动态在 DOM 内添加或删除 DOM 元素

⑻v-else:条件渲染指令,必须跟 v-if 成对使用

⑼v-else-if:判断多层条件,必须跟 v-if 成对使用

⑽v-cloak:解决插值闪烁问题

⑾v-once:只渲染元素或组件一次

⑿v-pre:跳过这个元素以及子元素的编译过程,以此来加快整个项目的编译速度

⒀v-show:条件渲染指令,将不符合条件的数据隐藏(display:none)

相关推荐
bemyrunningdog2 分钟前
AntDesignPro前后端权限按钮系统实现
前端
重阳微噪6 分钟前
Data Config Admin - 优雅的管理配置文件
前端
Hilaku9 分钟前
20MB 的字体文件太大了,我们把 Icon Font 压成了 10KB
前端·javascript·css
fs哆哆13 分钟前
在VB.net中,文本插入的几个自定义函数
服务器·前端·javascript·html·.net
专注VB编程开发20年16 分钟前
C# .NET多线程异步记录日声,队列LOG
java·开发语言·前端·数据库·c#
慧慧吖@33 分钟前
箭头函数的this指向
开发语言·前端·javascript
锈儿海老师34 分钟前
关于平凡AI 提示词造就世界最强ast-grep 规则这件事
前端·javascript·人工智能
开开心心就好38 分钟前
高效批量转换Word到PDF的方法
javascript·安全·智能手机·pdf·word·objective-c·lisp
LetsonH1 小时前
配置MCP报错npm error code EPERM
前端·npm·node.js
云墨-款哥的博客1 小时前
创建 Vue 3.0 项目的两种方法对比:npm init vue@latest vs npm init vite@latest
前端·vue.js·npm