生命周期【Vue】

文章目录

  • 引出生命周期
    • 实现方式一:通过外部的定时器实现
    • 实现方式二:methods
    • 实现方式三:生命周期mounted
  • 分析生命周期
  • 总结生命周期

引出生命周期

实现一个透明度来回变化的效果。

实现方式一:通过外部的定时器实现

缺点:代码有点割裂,代码尽量写在Vue实例里面,全局配置可以写在外面。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>引出生命周期</title><script src="../js/vue.js"></script>
</head>
<body><div id="root"><h2 :style="{opacity}">欢迎学习Vue</h2><!-- <button @click="fang">点我变化透明度</button> --></div>
</body>
<script>Vue.config.productionTip = falseconst vm = new Vue({el:'#root',data:{opacity:1,},})// 通过外部的定时器实现setInterval(()=>{vm.opacity -= 0.01if(vm.opacity <= 0) vm.opacity=1},16)
</script>
</html>

实现方式二:methods

methods中使用事件回调不可取,不符合需求。
此时,data中数据变化,重新解析模板,每个重新解析,又会再次调用开启定时器,如此一来,会极大消耗资源,并且屏幕出现鬼畜效果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uakwmN2-1659269367736)(2022-07-31-18-15-12.png)]

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>引出生命周期</title><script src="../js/vue.js"></script>
</head>
<body><div id="root"><h2 :style="{opacity}">欢迎学习Vue</h2>{{change()}}</div>
</body>
<script>Vue.config.productionTip = falseconst vm = new Vue({el:'#root',data:{opacity:1,},methods:{change(){setInterval(()=>{console.log("change")this.opacity -= 0.01if(this.opacity <= 0) vm.opacity=1},16)}}})
</script>
</html>

实现方式三:生命周期mounted

Vue完成模板的解析并把初始的真实DOM元素放入雅页面后(挂在完毕)调用 mounted,只调用了一次,开启了一个定时器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSD7FoWV-1659269367739)(2022-07-31-18-20-12.png)]

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>引出生命周期</title><script src="../js/vue.js"></script>
</head>
<body><div id="root"><h2 :style="{opacity}">欢迎学习Vue</h2></div>
</body>
<script>Vue.config.productionTip = falseconst vm = new Vue({el:'#root',data:{opacity:1,},// Vue完成模板的解析并把初始的真实DOM元素放入雅页面后(挂在完毕)调用 mountedmounted(){console.log("mounted")setInterval(()=>{this.opacity -= 0.01if(this.opacity <= 0) vm.opacity=1},16)},})
</script></html>

总结:

生命周期:

  1. 又名:生命周期回调函数、生命周期函数、生命周期钩子。
  2. 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。
  3. 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
  4. 生命周期函数中的this执行是vm 或 组件实例对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETs206ms-1659269367740)(./lifecycle.png)]

分析生命周期

vm销毁后 原生回调好使

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUUDH71A-1659269367742)(2022-07-31-18-30-09.png)]

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>分析生命周期</title><script src="../js/vue.js"></script>
</head>
<body><div id="root"><h2>当前的n值是{{n}}</h2><button @click="add">点我n+1</button><button @click="bye">点我销毁vm</button></div>
</body>
<script>Vue.config.productionTip = falseconst vm = new Vue({el:'#root',// // template全部替换el指向元素,的有一个根元素// template:`// <div>//     <h2>当前的n值是{{n}}</h2>//     <button @click="add">点我n+1</button>// </div>// `,data:{n:1},methods:{add(){this.n++},bye(){ // vm销毁后 原生回调好使console.log("bye")this.$destroy()}},beforeCreate() {// 此时vue中没有数据,还没绑定,vm实例中没有_data和nconsole.log("beforeCreate")// console.log(this)  // Vue// debugger},created() {// 此时vue实例上有了_data和n及其getsetconsole.log("created")// console.log(this)// debugger},beforeMount() {// 这里边操作DOM无效console.log("beforeMount")// console.log(this)// // debugger// document.querySelector('h2').innerText = '哈哈'},mounted() {console.log("mounted")// console.log(this)// // 对DOM操作有效// document.querySelector('h2').innerText = '哈哈'// debugger},beforeUpdate() { //页面和数据未同步console.log("beforeUpdate")// console.log(this.n)// debugger},updated() { //页面和数据同步console.log("updated")// console.log(this.n)// debugger},beforeDestroy() { // 到了这个阶段 设计数据更新不会再起到效果console.log("beforeDestroy")},destroyed() {console.log("destroyed")},})
</script>
</html>

beforeUpdate//页面和数据未同步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RlAKU0vZ-1659269367744)(2022-07-28-11-20-30.png)]

updated//页面和数据同步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xAhfevZ-1659269367747)(2022-07-28-11-24-41.png)]

总结生命周期

vm的一生(vm的生命周期):

  1. 将要创建 ===> 调用beforeCreate函数。
  2. 创建完毕 ===> 调用created函数。
  3. 将要挂载 ===> 调用beforeMount函数。
  4. (重要)挂载完毕 ===> 调用mounted函数。 ======> 【重要的钩子】
  5. 将要更新 ===> 调用beforeUpdate函数。
  6. 更新完毕 ===> 调用updated函数。
  7. (重要)将要销毁 ===> 调用beforeDestory函数。 ======> 【重要的钩子】
  8. 销毁完毕 ===> 调用destoryed函数。

常用的生命周期钩子及常用功能

  1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】
  2. beforeDestroy: 清楚定时器、解绑自定义事件、取消订阅消息等【收尾工作】
    关于销毁Vue实例
  3. 销毁后借助Vue开发者工具看不到任何信息
  4. 销毁后自定义事件会失效,但原生DOM事件依然有效
    ory函数。 ======> 【重要的钩子】
  5. 销毁完毕 ===> 调用destoryed函数。

常用的生命周期钩子及常用功能

  1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】
  2. beforeDestroy: 清楚定时器、解绑自定义事件、取消订阅消息等【收尾工作】
    关于销毁Vue实例
  3. 销毁后借助Vue开发者工具看不到任何信息
  4. 销毁后自定义事件会失效,但原生DOM事件依然有效
  5. 一般不会再beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了

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

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

相关文章

从0创建vite+vue3项目遇到的一些坑

使用ws自动创建的vitevue3项目后设置不了alias 答&#xff1a;不懂原理&#xff0c;但是有其他方法解决。直接在命令行执行“npm init vitelatest"后&#xff0c;一路选下去有create-vue的选项&#xff0c;就选这个create-vue创建&#xff1b;创建后会自动导入一个叫node…

滑动窗口最大值

题目链接 滑动窗口最大值 题目描述 注意点 只可以看到在滑动窗口内的 k 个数字返回 滑动窗口中的最大值1 < k < nums.length 解答思路 首先使用双端队列解决本题&#xff0c;队列中存储的是元素在数组中的下标&#xff0c;不断往队尾添加元素下标。在双端队列中&…

【图解算法数据结构】分治算法篇 + Java代码实现

文章目录 一、重建二叉树二、数值的整数次方三、打印从 1 到最大的 n 位数四、二叉搜索树的后序遍历序列五、数组中的逆序对 一、重建二叉树 public class Solution {int[] preorder;HashMap<Integer, Integer> dic new HashMap<>();public TreeNode buildTree(in…

算法:分治思想处理归并递归问题

文章目录 算法原理实现思路典型例题排序数组数组中的逆序对计算右侧小于当前元素的个数 总结 算法原理 利用归并思想进行分治也是很重要的一种思路&#xff0c;在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的&#xff0c;归并排序要能写出来&#xff1a; c…

Linux学习之vsftpd虚拟用户

/etc/vsftpd/vsftpd.conf里边有几项跟vsftpd虚拟用户有关的主要配置&#xff1a; guest_enableYES&#xff0c;允许匿名用户登录vsftpd guest_usernamevirtual&#xff0c;指定虚拟用户账户为virtual&#xff0c;就是把虚拟用户映射成Linux本地用户&#xff0c;这样可以使用Lin…

【C++】C++11新特性(下)

上篇文章&#xff08;C11的新特性&#xff08;上&#xff09;&#xff09;我们讲述了C11中的部分重要特性。本篇接着上篇文章进行讲解。本篇文章主要进行讲解&#xff1a;完美转发、新类的功能、可变参数模板、lambda 表达式、包装器。希望本篇文章会对你有所帮助。 文章目录 一…

用反射实现自定义Java对象转化为json工具类

传入一个object类型的对象获取该对象的class类getFields方法获取该类的所有属性对属性进行遍历&#xff0c;并且拼接成Json格式的字符串&#xff0c;注意&#xff1a;通过属性名来推断方法名获取Method实例通过invoke方法调用 public static String objectToJsonUtil(Object o…

C++指针、指针函数、函数指针、类指针

1、指针变量 #include <iostream>using namespace std;int main () {int var 20; // 实际变量的声明int *ip; // 指针变量的声明ip &var; // 在指针变量中存储 var 的地址cout << "Value of var variable: ";cout << var …

MVC模式分层练习

新建库 新建表 插入点数据 先不用MVC模式写功能,来看下缺点是什么 新建一个空项目 选项项目使用的JDK 自己的IDEA总是要重启下 新建模块 因maven还没教 添加框架支持 添加后项目多了这些 添加些必要依赖 这里注意下,如果导入jar包不对可以重新导入下或者是jar包本身出了问…

stable diffusion实践操作-writing

文章目录 前言一、优点1.1、免费开源1.2、拥有强大的外接模型 二、组成要素2.1 底模2.2 风格2.3 提示词2.4 参数配置 三、生图原理四、下载链接 实践正文一、安装1.1 电脑硬件配置查看1.2 安装本地版本的stable diffusion1.3 SD使用教程 二、模型介绍与下载2.1大模型2.2 Lora模…

C语言每日一练--------Day(8)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;图片整理 寻找数组下标 &#x1f493;博主csdn个人主页&#xff1a;小小…

安服面试 --- 01

1、常用渗透工具 burp、nmap、sqlmap、蚁剑、御剑、冰蝎、cobalt strike等 2、渗透测试中&#xff0c;拿到目标公司站点&#xff0c;接下来应该怎么做&#xff1f; &#xff08;1&#xff09;信息收集&#xff1a;收集目标公司的相关信息。包括域名、ip地址、子域名、开放端…

浅谈一下企业信息化管理

企业信息化管理 企业信息化是指将企业的生产过程&#xff0c;物料&#xff0c;事务&#xff0c;财务&#xff0c;销售等业务过程数字化&#xff0c;通过各种信息系统网络价格成新的信息资源&#xff0c;提供给各层次的人们东西观察各类动态业务中的一切信息&#xff0c;以便于…

POJ 3045 Cow Acrobats 二分+优先队列

一、题目大意 题目中给出了N头牛&#xff0c;这些牛要互相叠罗汉&#xff0c;牛i承担的风险risk[i]为牛i上面的牛的质量之和sum[i]&#xff08;如果上面没有牛就是0&#xff09;减去牛i的力量strength[i]&#xff0c;即risk[i]sum[i]-strength[i] 我们要优化这个叠罗汉的顺序…

学习大数据应该掌握哪些基础语言

大数据技术的体系庞大且复杂&#xff0c;每年都会涌现出大量新的技术&#xff0c;目前大数据行业所涉及到的核心技术主要就是&#xff1a;数据采集、数据存储、数据清洗、数据查询分析和数据可视化。 学习大数据需要掌握什么语言基础&#xff1f; 1、Java基础 大数据框架90%以…

安防监控/视频存储/视频汇聚平台EasyCVR接入海康Ehome车载设备出现收流超时的原因排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚平台既具…

C++ for 循环

for 循环允许您编写一个执行特定次数的循环的重复控制结构。 语法 C 中 for 循环的语法&#xff1a; for ( init; condition; increment ) {statement(s); }下面是 for 循环的控制流&#xff1a; init 会首先被执行&#xff0c;且只会执行一次。这一步允许您声明并初始化任…

1688API技术解析,实现关键词搜索淘宝商品(商品详情接口等)批量获取,可高并发

要使用1688API接口采集商品详情&#xff0c;可以按照以下步骤进行&#xff1a; 获取API接口权限&#xff1a;申请1688的app key和app secret&#xff0c;并获取access_token。 编写API请求代码&#xff1a;使用Python等编程语言&#xff0c;编写API请求代码。以下是一个Python…

​LeetCode解法汇总56. 合并区间

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 以数组 in…

如何使用Java进行机器学习?

在Java中进行机器学习&#xff0c;可以使用各种开源机器学习库和框架来实现。以下是一些常用的Java机器学习库&#xff1a; Weka&#xff1a;Weka 是一个非常流行的机器学习库&#xff0c;提供了大量的算法和工具&#xff0c;以及用于数据预处理、特征选择和可视化的功能。 De…