Vue.js 生命周期函数

news2024/11/16 2:40:30

系列文章目录

Vue.js基础简答题


文章目录

  • 系列文章目录
  • 前言
  • 一、创建阶段
    • 1.beforeCreate
    • 2.created
    • 3.beforeMount
    • 4.mounted
  • 二、运行阶段
    • 1.beforeUpdate
    • 2.updated
  • 三、销毁阶段
    • 1.beforeDestroy
    • 2.destroyed
  • 总结


在这里插入图片描述

前言

Vue.js 生命周期指的是Vue实例的生命周期;
Vue实例的生命周期,指的是实例从创建到运行、再到销毁的过程。
通过设置生命周期函数,可以在生命周期的特定阶段执行功能。
生命周期函数也称生命周期钩子。


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建阶段

特点:每个实例只能执行一次。

1.beforeCreate

beforeCreate 是 Vue 实例创建之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用的生命周期钩子函数。在这个阶段,实例的数据观测尚未开始,所以如果需要在此阶段进行数据观测,需要手动触发 $watch。

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  beforeCreate: function() {
    this.$watch('message', function(newVal, oldVal) {
      console.log('message changed from', oldVal, 'to', newVal);
    });
  }
});

2.created

created 是 Vue 实例创建完成后被立即调用的生命周期钩子函数。在这个阶段,实例已经完成了数据观测 (data observer),事件配置等工作,因此可以放心地对 DOM 进行操作。通常在这个阶段进行一些初始化操作,如获取数据、设置事件监听等。

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  created: function() {
    console.log('Vue instance created');
  }
});

3.beforeMount

beforeMount 是挂载阶段之前被调用的生命周期钩子函数。在这个阶段,模板编译完成,但是还没有将虚拟 DOM 渲染到真实 DOM。这个阶段可以用来执行一些与 DOM 直接相关的操作,如修改 CSS、添加事件监听器等。需要注意的是,如果在这个阶段进行了 DOM 操作,可能会导致性能问题。因此,建议使用 Vue.js 提供的指令和计算属性来处理数据绑定和 DOM 操作。

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  beforeMount: function() {
    // 在挂载前修改样式、添加事件监听器等操作
  }
});

4.mounted

mounted 是挂载阶段结束后被调用的生命周期钩子函数。在这个阶段,实例已经成功挂载到 DOM,可以放心地进行 DOM API 访问和其他异步操作。通常在这个阶段进行一些依赖于 DOM 或者网络请求的操作。

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  },
  mounted: function() {
    // 在挂载后修改样式、访问 DOM、发送网络请求等操作
    $.get('https://api.example.com/data').then(function(data) {
      Vue.set(this.$data, 'message', data.message); // 将获取到的数据赋值给 message
    }.bind(this)); // 注意使用 bind(this) 避免上下文丢失的问题
  }
});

二、运行阶段

特点:按需调用。

1.beforeUpdate

beforeUpdate 是数据更新时触发的生命周期钩子函数。在这个阶段,实例的数据仍然保持不变,因此可以放心地进行数据处理和计算属性的更新。如果在这个阶段进行了不必要的操作,可能会导致性能问题。建议使用计算属性来处理数据更新。

new Vue({
  el: '#app',
  data: {
    _message: 'Hello Vue!' // 注意这里使用了下划线作为前缀表示私有变量,避免与外部直接访问冲突
  },
  computed: {
    message: function() { return this._message; } // 将 _message 通过计算属性暴露给模板使用
  },
  beforeUpdate: function() {} // 在数据更新前执行的操作,例如更新计算属性等
});

2.updated

updated 是数据更新后触发的生命周期钩子函数。在这个阶段,实例的数据已经被更新,可以放心地进行 DOM API 访问和其他异步操作。通常在这个阶段进行一些依赖于 DOM 或者网络请求的操作。

new Vue({
  el: '#app',
  data: {
    _message: 'Hello Vue!' // 注意这里使用了下划线作为前缀表示私有变量,避免与外部直接访问冲突
  },
  computed: {
    message: function() { return this._message; } // 将 _message 通过计算属性暴露给模板使用
  },
  methods: {
    fetchData: function() {
      $.get('https://api.example.com/data').then(function(data) {
        Vue.set(this.$data, 'message', data.message); // 将获取到的数据赋值给 message
      }.bind(this)); // 注意使用 bind(this) 避免上下文丢失的问题
    }
  },
  updated: function() {} // 在数据更新后执行的操作,例如调用方法等
});

三、销毁阶段

特点:每个实例只能执行一次。

1.beforeDestroy

beforeDestroy 是组件销毁之前被调用的生命周期钩子函数。在这个阶段,实例仍然可以访问 DOM 和进行 DOM API 操作,但已经被标记为即将卸载。如果需要在组件销毁前进行一些清理操作,可以在这个阶段进行。

new Vue({
  el: '#app',
  data: {},
  methods: {},
  beforeDestroy: function() {
    // 在组件销毁前执行的操作,例如清除定时器、解除事件监听等
  },
  beforeUnmount: function() {} // 在组件卸载前执行的操作,例如移除事件监听器等
});

2.destroyed

destroyed 是组件销毁后被调用的生命周期钩子函数。在这个阶段,实例已经从 DOM 中移除,所有与 DOM 相关的操作都不再有效。通常在这个阶段进行一些资源释放、清除定时器等操作。

new Vue({
  el: '#app',
  data: {},
  methods: {},
  beforeDestroy: function() {
    // 在组件销毁前执行的操作,例如清除定时器、解除事件监听等
  },
  destroyed: function() {} // 在组件销毁后执行的操作,例如关闭弹窗、清除定时器等
});


总结

Vue.js 是一个用于构建用户界面的渐进式框架。它的核心库只关注视图层,易于与其他库或已有项目集成。在 Vue.js 中,我们可以通过定义生命周期钩子函数来监听和操作 DOM 元素的变化,从而实现数据的双向绑定、组件化等功能。

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

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

相关文章

深入学习 Redis - 基于 Jedis 通过 Java 客户端操作 Redis

目录 一、Jedis 依赖 二、Java 客户端操控 redis 2.1、准备工作(ssh 隧道) 2.2、概要 2.2、string 2.3、hash 2.4、list 2.5、set 2.5、zset 一、Jedis 依赖 自己去 中央仓库 上面找. 二、Java 客户端操控 redis 2.1、准备工作(ssh 隧…

数学建模学习(7):单目标和多目标规划

优化问题描述 优化 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 线性规划 线性规划是指目标函数和约束都是线性的情况 [x,fval]linprog(f,A,b,Aeq,Beq,LB,U…

C++创建线程

前言 线程是轻量级的进程(LWP:light weight process),在Linux环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分…

【点云处理教程】03使用 Python 实现地面检测

一、说明 这是我的“点云处理”教程的第3篇文章。“点云处理”教程对初学者友好,我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在上一教程中,我们在不使用 Open3D 库的情况下从深度数据计算点云。在本教程中,我们将首先…

H5打包封装小程序系统开发

H5打包封装小程序系统开发 H5打包封装小程序系统开发是指将H5页面打包封装成小程序的开发过程。下面是一个简单的步骤: 准备工作:首先,需要准备好H5页面的代码和资源文件。确保H5页面在浏览器中正常运行,并且没有依赖于浏览器特…

【LeetCode每日一题合集】2023.7.24-2023.7.30

文章目录 771. 宝石与石头代码1——暴力代码2——位运算集合⭐(英文字母的long集合表示) 2208. 将数组和减半的最少操作次数(贪心 优先队列)2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐(线段树)TODO2500. 删除…

渗透测试技术知识技能全景图(超清晰哦~~!)

这张技术全景图是博主对信息安全专业的了解学习,以及通过多方资料学习整理出来的,也结合了个人的一些学习经验在里面,图里详细列举了渗透测试这门技术应该具备的知识技能以及一些相关的图书的推荐。里面东西均为通过个人经验对渗透测试的了解…

DRIFTINGBLUES-1靶机通关详解

信息收集 漏洞发现 进web看源码发现 解码得到 /noteforkingfish.txt 访问发现是ook 解得 先把这个名字记下来 说不定之后要ssh爆破有用 然后他说要用 host file 注意到域名可能是driftingblues.box 加到hosts里试试 没啥用 看别人wp知道还得爆破子域名 那kali也添加个hosts…

【腾讯云 Cloud Studio 实战训练营】全新的开发方式,让你实现一站式开发

一、前言 关于 Cloud Studio 全在线云端开发 用户只需要浏览器就可以访问和使用Cloud Studio,无需在本地配置开发环境。Cloud Studio将开发环境部署在云服务器上,用户可以随时随地进行开发。多语言支持 Cloud Studio支持常见的开发语言,如Node.js、Python、Java、PHP等。用户…

QtC++ 技术分析3 - IOStream

目录 iostreamscanf/printfiostream 整体架构流相关类流缓冲区 模板特化后整体结构文件流文件流对象创建常见文件流操作输出格式设定文件流状态 字符串流字符串流内部缓冲区字符串流使用 流缓冲区用户自定义 IO iostream scanf/printf 几种常见的输入输出流函数 scanf 从键盘…

哆啦A梦(Python代码实现)

目录 1 送她的多啦A梦 2 白驹过隙 3 Python代码实现 1 送她的多啦A梦 一个哆啦A梦让她开心开心好久好久。我也很开心,昨天送了一个实体模型,今天用Python代码再弄一个送给她。 哆啦A梦(日语:ドラえもん,英语&…

linux页框回收之shrink_node函数源码剖析

概述 《Linux内存回收入口_nginux的博客-CSDN博客》前文我们概略的描述了几种内存回收入口,我们知道几种回收入口最终都会调用进入shrink_node函数,本文将以Linux 5.9源码来描述shrink_node函数的源码实现。 函数调用流程图 scan_control数据结构 str…

如何关闭谷歌浏览器自动更新

适用范围: 写自动化脚本时,需要安装浏览器驱动,安装浏览器驱动时需要下载对应的浏览器驱动版本,如果浏览器版本一直在自动更新的话,自动化脚本会报错浏览器版本和浏览器驱动不匹配,所以建议关闭谷歌浏览器自动更新&am…

认识 springboot 之 它的配置文件 -2

前言 本篇了解springboot中配置的作用,介绍配置文件的种类,介绍简单使用配置文件,简单的小技巧如何设置注释,开启热部署等等,如有错误,请在评论区指正,让我们一起交流,共同进步&…

内存分区模型

C程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程…

ReentrantLock锁的实现

ReentrantLock基于AQS,在并发编程中可以实现公平锁和非公平锁来对同步资源进行控制,并且是可重入锁。 1.ReentrantLock中的类的继承结构: 2.构造方法: 3.非公平锁的实现 看是否能够通过CAS来设置state来获取到锁,如果…

【数据结构】这堆是什么

目录 1.二叉树的顺序结构 2.堆的概念及结构 3.堆的实现 3.1 向上调整算法与向下调整算法 3.2 堆的创建 3.3 建堆的空间复杂度 3.4 堆的插入 3.5 堆的删除 3.6 堆的代码的实现 4.堆的应用 4.1 堆排序 4.2 TOP-K问题 首先,堆是一种数据结构,一种特…

Selenium开发环境搭建

1.下载Python https://www.python.org/downloads/ 下载下来选择自己创建的路径进行安装,然后配置环境变量 cmd命令框查看 2.安装selenium cmd命令框输入: pip install selenium3.下载pycharm https://www.jetbrains.com/pycharm/download/#sec…

VLOOKUP多条件查询

LOOKUP(1,0/((A3:A15A18)*(C3:C15C18)),F3:F15)

打印Winfrom控件实现简陋版的打印(C#)

本文在前面写的博文基础上进行修改:利用Graphics的CopyFromScreen实现简陋版的打印(C#)_zxy2847225301的博客-CSDN博客 通过截图的方式进行打印在前面的文章后面已经介绍过,有问题。 UI布局如下: 代码如下: using System; using…