Chapter 08 Vue生命周期

news2024/11/13 14:42:20

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅!

文章目录

  • 前言
  • 一、生命周期阶段
  • 二、生命周期钩子
  • 三、生命周期图示


前言

Vue.js 是一个渐进式的 JavaScript 框架,广泛用于构建用户界面。理解 Vue 的生命周期对于开发高效、可维护的应用程序至关重要。本文详细讲解了 Vue 组件的生命周期及其各个阶段的钩子函数。


本篇文章参考黑马程序员

一、生命周期阶段

Vue生命周期:一个Vue实例从创建到销毁的整个过程。

生命周期四个阶段:
①创建阶段
创建阶段是 Vue 实例的初始化过程。在这个阶段,Vue 实例被创建,数据观测和事件配置开始,但尚未进行任何 DOM 操作。

②挂载阶段
挂载阶段是将 Vue 实例挂载到 DOM 上的过程。在这个阶段,模板被编译并插入到 DOM 中。

③更新阶段
更新阶段是当组件的数据发生变化时,Vue 会重新渲染组件的过程。在这个阶段,虚拟 DOM 会被重新计算并更新到实际 DOM 中。

④销毁阶段
销毁阶段是 Vue 实例被销毁的过程。在这个阶段,组件的所有资源和事件监听器都会被清理。
在这里插入图片描述

二、生命周期钩子

在 Vue 生命周期的过程中,会自动调用一些函数,这些函数被称为“生命周期钩子”。
生命周期钩子允许开发者在特定阶段执行自定义代码。每个阶段都有相应的生命周期钩子,以便于开发者在合适的时机进行操作。

①创建阶段
在这个阶段,Vue 实例被初始化,数据观测和事件配置开始。

  • beforeCreate
    实例初始化后被调用,数据观测和事件配置尚未完成,无法访问 datamethods

  • created
    实例创建完成后被调用,可以访问 datamethods,适合进行数据获取和初始化操作,但此时 DOM 还未挂载。

【示例】

<body>
  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      // 1. 创建阶段(准备数据)
      beforeCreate () {
        console.log('beforeCreate 响应式数据准备好之前', this.count)
      },
      created () {
        console.log('created 响应式数据准备好之后', this.count)
        // this.数据名 = 请求回来的数据
        // 可以开始发送初始化渲染的请求了
      },
    })
  </script>
</body>

运行结果:
在这里插入图片描述

②挂载阶段

在这个阶段,Vue 实例被挂载到 DOM 上。

  • beforeMount
    挂载开始前被调用,此时模板已编译,但尚未插入到 DOM 中,可以在此阶段进行一些准备工作。

  • mounted
    实例挂载到 DOM 上后被调用,此时可以进行 DOM 操作,如获取元素的尺寸或进行 API 请求。

【示例】

<body>

  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      

      // 2. 挂载阶段(渲染模板)
      beforeMount () {
        console.log('beforeMount 模板渲染之前', document.querySelector('h3').innerHTML)
      },
      mounted () {
        console.log('mounted 模板渲染之后', document.querySelector('h3').innerHTML)
        // 可以开始操作dom了
      },

      
    })
  </script>
</body>

运行结果:
在这里插入图片描述

③更新阶段

当数据变化时,组件会重新渲染。

  • beforeUpdate
    数据更新后,虚拟 DOM 重新渲染前被调用,可以访问更新前的状态。

  • updated
    组件的 DOM 更新后被调用,可以进行 DOM 操作。

【示例】

<body>
  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      // 3. 更新阶段(修改数据 → 更新视图)
      beforeUpdate () {
        console.log('beforeUpdate 数据修改了,视图还没更新', document.querySelector('span').innerHTML)
      },
      updated () {
        console.log('updated 数据修改了,视图已经更新', document.querySelector('span').innerHTML)
      },

    })
  </script>
</body>

运行结果:
在这里插入图片描述
点击“+”号按钮更改数据后:
在这里插入图片描述
④销毁阶段

在这个阶段,Vue 实例被销毁。

  • beforeDestroy
    实例销毁之前被调用,可以进行清理操作,如移除事件监听器或定时器。

  • destroyed
    实例销毁后被调用,此时所有的事件监听和子实例都被移除,可以在此阶段进行一些清理工作。

【示例】

<body>
  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      // 4. 卸载阶段
      beforeDestroy () {
        console.log('beforeDestroy, 卸载前')
        console.log('清除掉一些Vue以外的资源占用,定时器,延时器...')
      },
      destroyed () {
        console.log('destroyed,卸载后')
      }
    })
  </script>
</body>

运行结果:
在这里插入图片描述
在控制台输入app.$destroy()并回车后:
在这里插入图片描述

Vue.$destroy() 是 Vue 实例的方法,用于手动销毁 Vue 实例。调用此方法后,Vue 会执行一系列清理操作,以确保组件及其相关资源被正确释放。

三、生命周期图示

以下是 Vue 组件生命周期的图示,展示了各个钩子的调用顺序:

beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2097720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue的在线商城系统

基于springbootvue的商城系统 (源码L文ppt)4-056 4 系统设计 4.1 系统功能模块设计 经过分析本系统的实际需求&#xff0c;系统主要分为三个模块&#xff0c;用户、商家以及管理员&#xff0c;具体的功能模块如图4-1所示&#xff1a; 图4-1 功能模块设计图 4.2…

超声波清洗机什么牌子值得入手?好用的超声波清洗机推荐

即便身处快节奏的工作环境中&#xff0c;我们仍需重视个人卫生及日常用品的清洁维护&#xff0c;这不仅是生活质量的体现&#xff0c;更是关乎健康的基本原则。长期忽视清洁&#xff0c;灰尘积累则可能成为细菌滋生的温床&#xff0c;进而悄悄威胁我们的身体健康。因此&#xf…

使用BDT利率二叉树模型来计算期权的初始价值

Black-Derman-Toy (BDT) 模型是于1990年开发的一种用于金融市场的利率模型。这个模型是一个单因子短期利率模型&#xff0c;它假设利率遵循一个均值回归过程&#xff0c;即利率随时间趋向于回归到长期平均值。 BDT模型的关键特点包括&#xff1a; 它能够校准到初始的利率期限…

09-02 周一 Ubuntu上使用docker-compose部署elasticsearch和kibana服务

09-02 周一 Ubuntu上部署elasticsearch和kibana服务 时间版本修改人描述2024年9月2日11:13:54V0.1宋全恒新建文档 简介 由于组里需要提供一个简易的环境来部署一套服务&#xff0c;可以通过接口进行数据的存储和检索&#xff0c;因此&#xff0c;直接部署一套ES服务来充当这样…

[Linux网络]TCP三次握手和四次挥手的连接建立和断开

TCP的三次握手 第一次握手&#xff1a;客户端发送网络包&#xff0c;服务器端收到&#xff0c;证明客户端的发送能力、服务器的接收能力是正常的。第二次握手&#xff1a;服务器发送网络包&#xff0c;客户端收到&#xff0c;证明服务器端的发送能力是正常的&#xff0c;不过此…

每日一题,零基础入门FPGA——工程师在线精讲,直播预告

题目传送门&#xff1a;F学社 zzfpga.com/StudentPlatform/Sheet/QuestionBankhttp://zzfpga.com/StudentPlatform/Sheet/QuestionBank 【第Ⅰ期题目 * 5】 请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 【第Ⅰ期题目 * 4】 请设计一个0…

合宙低功耗4G模组Air780EP——产品规格书

Air780EP作为合宙通信推出的LTE Cat. 1 bis通信模块&#xff0c;基于移芯EC718P平台&#xff0c; 支持LTE 3GPP Release 14技术&#xff0c;确保数据传输的高效性和稳定性。 作为4G全网通模块&#xff0c;兼容各大运营商网络&#xff0c;提供广泛的网络覆盖和灵活性。 作为4…

驱动开发系列14 - Linux Graphics Wayland 详解

目录 一:概述 二:操作系统如何支持 Wayland 三:显卡驱动如何支持 Wayland 四:Wayland 协议介绍 一:概述 Wayland 是一种通信协议,规定了显示服务器与其客户端之间的通信,以及该协议的 C 语言库实现。使用 Wayland 协议的显示服务器称为 Wayland 合成器,因…

为什么单元测试在软件开发中很重要?

单元测试在软件开发过程中扮演着至关重要的角色&#xff0c;其重要性主要体现在以下几个方面&#xff1a; 保证代码质量&#xff1a;单元测试是对软件中的最小可测试单元——函数、方法或类进行检查和验证的过程。通过编写针对各个模块的独立测试用例&#xff0c;开发者能够确…

Python进阶之-加密库cryptography使用详解

✨前言 cryptography 库是一个强大的 Python 加密库&#xff0c;提供了对加密算法和协议的高层和低层访问。它是用来实现数据加密、签名、密钥管理等功能的。以下是一些常见用法的详解&#xff0c;帮助你理解如何使用这个库。 ✨安装 首先&#xff0c;你需要确保安装了 cryp…

经纬恒润半年报:净亏损超3亿元,研发支出增长/毛利下降

作为近年来为数不多成功IPO上市的汽车智能网联概念股&#xff0c;经纬恒润正处于「研发支出增长、毛利率下降」的阵痛期。这也反映出当下产业链的共性困难&#xff0c;车企降本、供应链白热化竞争。 本周&#xff0c;经纬恒润&#xff08;688326&#xff09;发布2024年半年报&a…

怎么才能快速提升网站在谷歌的收录?

​想让你的网站在谷歌快速收录&#xff0c;其实正常的方法都需要时间&#xff0c;无论是定期更新&#xff0c;提交网站地图&#xff0c;搞外链建设啥的&#xff0c;这些方法虽然有效&#xff0c;但见效慢。而且谷歌爬虫不会一下子抓取你所有页面&#xff0c;需要时间。如果真想…

鸿蒙Promise是什么?怎么用?面试遇到如何回答?Promise静态方法有那些?

#什么是Promise&#xff1f; Promise是用来管理异步操作的对象&#xff0c;可以获取成功&#xff08;或失败&#xff09;的结果 #Promise的状态&#xff1f; Promise 必然处于 3 种状态中的某一种&#xff0c;调用resolve,reject 的本质就是更改他的状态 3 种状态: 1. 待定&am…

Lazada商家必看:如何高效利用自养号进行产品测评

Lazada自养号测评技术是一种电商运营策略&#xff0c;通过卖家自己创建和管理买家账号&#xff0c;以模拟真实的买家行为&#xff08;如浏览、收藏、加购和下单等&#xff09;&#xff0c;从而提高产品的排名、权重和销量。以下是对Lazada自养号测评技术的详细解析&#xff1a;…

一文搞懂 JavaScript 模块化规范:CommonJS、AMD、ES6 Module

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、为什么需要模块化&#xff1f;二、早期的模块化标准2.1 CommonJS 规范2.1.1 CommonJS 简介2.1.2 CommonJS 的特性2.1.3 CommonJS 的使用示例2.1.4 CommonJS 可能出现的问题 2.2. AMD 规范2.2.1 AMD 简介2.2.2 AMD 的特性…

速度与激情:荣耀100 GT携第三代骁龙8来袭,性能爆表

在智能手机市场&#xff0c;荣耀品牌以其独特的设计理念和创新技术赢得了众多消费者的喜爱。 随着荣耀100 GT预计将在年底登场的消息曝光&#xff0c;这款作为荣耀90 GT迭代更新款的智能手机&#xff0c;无疑将成为市场上的一大亮点。从外观设计到性能配置&#xff0c;荣耀100…

小童(化名)的轻度自闭症之旅

在儿童的成长道路上&#xff0c;每位家长都期望自己的孩子能够健康快乐地成长。然而&#xff0c;当小童&#xff08;化名&#xff09;被诊断出患有轻度自闭症时&#xff0c;这个家庭仿佛踏上了一段不同寻常的旅程。 小童的轻度自闭症表现并不明显&#xff0c;但仔细观察&#x…

使用Dify搭建企业知识库聊天机器人

本文简介 在当今数字化时代&#xff0c;企业知识库的建设和维护对于提升工作效率和服务质量至关重要。AI聊天机器人作为知识库的交互界面&#xff0c;可以提供24/7的即时服务。 本文将介绍如何使用 Dify 这一工具快速搭建企业知识库聊天机器人&#xff0c;它可以当你企业的职…

为什么太极拳适合帕金森病患者进行锻炼?

为什么太极拳适合帕金森病患者进行锻炼&#xff1f; 太极拳是一种低强度、连贯性和平衡性要求较高的运动&#xff0c;它通过缓慢、柔和的动作和深长的呼吸来提高身体的协调性和灵活性。对于帕金森病患者来说&#xff0c;太极拳的这些特点使其成为一种非常适合的锻炼方式。 帕金…

UDP简单聊天室创建

目录 一. 服务端模块实现 二. 处理聊天消息模块实现 三. 调用服务端模块实现 四. 客户端模块实现 五. 效果展示 本文介绍了如何用UDP创建一个简单的聊天室。 一. 服务端模块实现 服务端仍然沿用我们前面的思想&#xff08;高内聚低耦合&#xff09;&#xf…