Vue.js 生命周期函数

2023-11-13

系列文章目录

Vue.js基础简答题



在这里插入图片描述

前言

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 元素的变化,从而实现数据的双向绑定、组件化等功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js 生命周期函数 的相关文章

随机推荐

  • 数据结构---AVL树

    AVL树 AVL树的概念 AVL树节点的定义 AVL树的插入 源代码 AVL树的概念 二叉搜索树虽然可以缩短查找的效率 但是 如果数据有序或接近有序二叉搜索树将退化为单支树 查找元素相当于在顺序表中搜索元素 效率就会变低 因此 两位俄罗斯的
  • 基于NI_TestStand的智能驾驶自动化测试

    在汽车产业不断发展的今天 智能驾驶已经成为了汽车中必不可少的一部分 虽然目前真正的无人驾驶技术还未广泛应用于我们的日常生活中 但各式各样的驾驶辅助系统 如碰撞预警 自动刹车 自适应巡航等功能已经在为我们的驾驶员保驾护航 今天小编就带大家一起
  • deepin v23

    deepin v23虚拟机windows远程控制 仅限内网 解决deepin在虚拟机中鼠标卡顿延迟问题 需要安装x11vnc和xrdp 1 安装ssh 2 安装x11vnc 2 1 x11vnc配置开机自启 3 安装xrdp 3 1 打开终
  • ffmpeg rtsp 推流_RTSP网络摄像头 WEB端播放 并实时人脸检测

    彩色视频为摄像头的原始数据 灰色视频 灰度化 缩放 用来检测人脸 人脸图片为比对成功后回显 项目地址 https github com 15225845996 rtsp face 功能描述 1 浏览器实时播放摄像头信息 2 实时人脸检测 圈
  • Window主机加固

    win r 输入cmd进入命令提示符 用dir调出所有任务 cd 可以进入一个指定目录 cd 穿越或返回上一层 文件名有空格不连贯就是蓝标 箭头所指 没有空格的就是红色所指 它们的区别在于有空格是有双引号的 没有空格是没有的 切换盘的话 直
  • [数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

    本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化 GeoPandas是一个Python开源项目 旨在提供丰富而简单的地理空间数据处理接口 GeoPandas扩展了Pandas的数据类型 并使用matplotlib进
  • Excel单元格数值统计

    Excel单元格数值统计 Excel 工作表中对选定区域的数值进行统计的功能非常实用 仿照Excel的这个功能 请对给定表格中选中区域中的单元格进行求和统计 并输出统计结果 为简化计算 假设当前输入中每个单元格内容仅为数字或公式两种 如果为
  • 2021-08-02

    触发器 查询 删除 修改 一 什么是触发器 触发器 trigger 是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法 它是与表事件相关的特殊的存储过程 它的执行不是由程序调用 也不是手工启动 而是由事件来触发 二
  • 分割2021算法合集

    魔改nnU Net夺冠 2021 BraTS 脑肿瘤分割竞赛第一名解决方案 魔改nnU Net夺冠 2021 BraTS 脑肿瘤分割竞赛第一名解决方案 代码 https github com rixez Brats21 KAIST MRI
  • 电子信息工程考研:12大专业方向解读

    导读 模式识别与智能系统专业解读 通信与信息系统专业解读 电路与系统专业解读 信号与信息处理专业解读 电子与通信工程专业解读 电力电子与电力传动专业解读 光电信息工程专业解读 物理电子学专业解读 控制工程专业解读 集成电路工程专业解读 精密
  • mysql row()函数_详解mysql数据库binlog三种模式的区别(row,statement,mixed)

    概述 Mysql binlog日志有三种格式 分别为Statement MiXED 以及ROW 这三种格式之间有什么区别呢 下面先介绍下各自的优缺点 ROW 日志中会记录成每一行数据被修改的形式 然后在slave端再对相同的数据进行修改 只
  • 5.12 树和森林的遍历

    一 树的遍历 1 先根遍历 根左右 深度优先遍历 若树非空 先访问根节点 再依次对每棵子树进行先根遍历 树的先根遍历 void PreOrder TreeNode R if R NULL visit R 访问根结点 while R还有下一棵
  • 动态图分类:DySAT算法及其Python实现

    动态图分类 DySAT算法及其Python实现 动态图分类是计算机视觉领域的一个重要任务 其目标是对动态图像序列进行分类 DySAT算法是一种基于结构Self Attention和时域Self Attention的深度学习模型 用于解决动态
  • 在阿里云里面服务器怎么样可以更好的链接数据库

    环境 阿里云ubuntu服务器 阿里云RDS数据库 问题 如何在阿里云服务器的终端使用shell命令连接RDS云数据库 解决方法 1 阿里云服务器安装MySQL sudo apt get install mysql server 如果出现u
  • 非标准包 game.rgss3a 的打开方法

    写在前面 最近在玩 RPG 游戏 想拆一个 Game rgss3a 包 在网上找了很久的拆包方法 感觉写的比较凌乱 我来给大家整理一下吧 不过我本人的技术能力也很差 不确定说的是不是对的 就当是给大家提供几个方法 大家都自己试一下吧 先说
  • 近源渗透学习

    一 近源渗透 近源渗透测试是网络空间安全领域逐渐兴起的一种新的安全评估手段 它是一种集常规网络攻防 物理接近 社会工程学及无线电通信攻防等能力于一体的高规格网络安全评估行动 网络安全评估小组在签订渗透测试授权协议后 通过乔装 社工等方式实地
  • git 常用命令---修改Git默认编辑器为vim

    1 配置 git config global user email you example com 配置git用户名 git config global user name Your Name 配置git邮件 git config glob
  • C++类使用未定义类型 use undefined class

    a h file include
  • [论文笔记]AutoAssign 阅读笔记

    AutoAssign 阅读笔记 AutoAssign Differentiable Label Assignment for Dense Object Detection 摘要 1 引言 2 相关工作 固定标签分配 Fixed Label
  • Vue.js 生命周期函数

    系列文章目录 Vue js基础简答题 文章目录 系列文章目录 前言 一 创建阶段 1 beforeCreate 2 created 3 beforeMount 4 mounted 二 运行阶段 1 beforeUpdate 2 update