Vue.js 生命周期函数

系列文章目录

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.mzph.cn/news/15285.shtml

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

相关文章

【RabbitMQ】Linux系统服务器安装RabbitMQ

一、下载 首先应该下载erlang,rabbitmq运行需要有erland环境。 官网地址:https://www.erlang.org/downloads 下载rabbitmq 官网环境:https://www.rabbitmq.com/download.html 注意:el7对应centos7,el8对应centos8…

在Word中快速输入方框对号

在Word中输入方框对号播报文章 先输入“2611”,然后同时按ALTX, 插入 符号 其他符号

主流开源监控系统一览

减少故障有两个层面的意思,一个是做好常态预防,不让故障发生;另一个是如果故障发生,要能尽快止损,减少故障时长。而监控的典型作用,就是帮助我们发现及定位故障,这两个环节对于减少故障时长至关…

STM32 串口学习(二)

要用跳线帽将PA9与RXD相连,PA10与TXD相连。 软件设计 void uart_init(u32 baud) {//UART 初始化设置UART1_Handler.InstanceUSART1; //USART1UART1_Handler.Init.BaudRatebound; //波特率UART1_Handler.Init.WordLengthUART_WORDLENGTH_8B; //字长为 8 位数据格式U…

CAN通信的位定时与同步

位定时与同步 1.位时间 1.1相关基本概念 1)系统时钟:记为 t c l k t_{clk} tclk​; 2)CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,表示CAN控制器的工作时钟,实际上就是一个时…

网络编程套接字

网络编程套接字 预备知识理解源IP地址和目的IP地址认识端口号理解 "端口号" 和 "进程ID"理解源端口号和目的端口号认识TCP协议认识UDP协议网络字节序 socket编程接口socket 常见APIsockaddr结构 简单的UDP网络程序UDP通用服务端udp服务端初始化udp服务端启…

自动化运维工具——Ansible

自动化运维工具——Ansible 一、Ansible概述二、ansible 环境安装部署1.管理端安装 ansible2.ansible 目录结构3.配置主机清单4.配置密钥对验证 三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9&a…

自定义一个仿拼多多地址选择器

前言 做了一个仿拼多多的地址选择器,但是与拼多多实现方法有些出入,大体效果是差不多的。废话不多说,先上一张效果动图: 开始 先说说本文的一些概念。地区级别:就是比如省级,市级,县级&#x…

map,set的封装(基于改造红黑树)

目录 引言 1.迭代器 2.map的[]重载 3.KeyOfValue模板参数 4.整体代码展示 //改造后的红黑树代码 #include <iostream> using namespace std;enum Colour {RED 0,BLACK, };//为了实现map与set封装使用同一个模板红黑树&#xff0c;前者的value是pair&#xff0c;后者…

WebAgent-基于大型语言模型的代理程序

大型语言模型&#xff08;LLM&#xff09;可以解决多种自然语言任务&#xff0c;例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近&#xff0c;LLM在自主网络导航方面也取得了巨大成功&#xff0c;代理程序助HTML理解和多步推理的能力&#xff0c;通过控制计算…

Spring——更快捷的存储 / 获取Bean对象

文章目录 前言一、存储 Bean 对象类注解为什么有五个类注解使用类注解存储对象配置扫描路径(重中之重)添加注解存储 Bean 对象 方法注解配置扫描路径(重中之重)使用方法注解存储对象 二、获取 Bean 对象Autowired属性注入Setter注入构造方法注入 Resource 总结 前言 本人是一个…

【雕爷学编程】MicroPython动手做(20)——掌控板之三轴加速度6

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位&#xff0c;通过元素的定位我们可以去更好的将盒子放到我们想要的位置&#xff0c;下面就一起来看看吧&#xff01; 定位 定位posi…

rust 闭包函数

函数有自己的类型&#xff0c;可以像使用基础类型一样使用函数&#xff0c;包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数&#xff0c;也有自己的类型定义。不过&#xff0c;函数实际上是指针类型&#xff0c;在 rust 所有权中属于借用的关…

Tomcat修改端口号

网上的教程都比较老&#xff0c;今天用tomcat9.0记录一下 conf文件夹下server.xml文件 刚开始改了打红叉的地方&#xff0c;发现没用&#xff0c;改了上面那行

SpringBoot百货超市商城系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot框架开发的百货超市系统。首先&#xff0c;这是一个很适合SpringBoot初学者学习的项目&#xff0c;代…

Beyond Compare和git merge、git rebase

文章目录 各个分支线将dev1 rebase进 dev2将dev1 merge进dev2 各个分支线 将dev1 rebase进 dev2 gitTest (dev2)]$ git rebase dev1local: 是rebase的分支dev1remote&#xff1a;是当前的分支dev2base&#xff1a;两个分支的最近一个父节点 将dev1 merge进dev2 gitTest (dev…

json-server创建静态服务器2

上次写的 nodejs创建静态服务器 这次再来个v2.0 利用json-server很方便就可以实现。 vscode打开文件夹&#xff0c;文件夹所在终端&#xff1a; json-server.cmd --watch db.json 这里视频教程是没有上述命令标红的&#xff0c;但是会报错&#xff0c;具体不详&#xff0c…

uniapp小程序自定义loding,通过状态管理配置全局使用

一、在项目中创建loding组件 在uniapp的components文件夹下创建loding组件&#xff0c;如图&#xff1a; 示例代码&#xff1a; <template><view class"loginLoading"><image src"../../static/loading.gif" class"loading-img&q…

SpringBoot环境标识设置及nacos匹配配置

本地环境标识设置 本地父类maven配置 可以看到相关的分类&#xff0c;设置环境标识主要需要用到profiles; <profiles><profile><id>dev</id><properties><!-- 环境标识&#xff0c;需要与配置文件的名称相对应 --><profiles.active&…