Vue生命周期

生命周期

Vue.js 组件生命周期:

生命周期函数(钩子)就是给我们提供了一些特定的时刻,让我们可以在这个周期段内加入自己的代码,做一些需要的事情;

生命周期钩子中的this指向是VM 或 组件实例对象

在JS 中,函数的执行上下文(也就是函数内部的 this 指向的对象)取决于函数的调用方式而 Vue 在创建组件实例时,会在内部确保生命周期钩子函数的执行上下文是指向组件实例的

具体来说,当 Vue 创建一个组件实例时,它会使用JS 的 Function.prototype.bind 方法来绑定组件实例作为函数内部的 this这意味着无论在哪个生命周期钩子函数中,我们使用的 this 都会指向当前组件实例

Vue 实例生命周期

image-20230829104559179

  • 初始化:

    • Events & Lifecycle:初始化生命周期、事件,数据代理尚未开始(beforeCreate前)

    • Injections & reactivity:初始化数据监测、数据代理,(beforeCreate实例创建后)

  • 创建阶段:

    • beforeCreate: 在数据监测、数据代理注入之前,在这个阶段初始化生命周期、事件,但数据代理还未开始注入

      数据代理:Vue 会将组件实例上的数据(data)、计算属性(computed)、方法(methods)等代理到实例本身上,在beforeCreate阶段使得我们可以通过 this 访问到vm,我们不能通过 this 直接访问 data 中的数据和 methods 中的方法

      数据监测:Vue 开始进行数据的响应式监测,即开始追踪数据的变化以便在数据变化时更新视图。

    • created: 数据监测、数据代理都已完成,数据监测确保了数据的变化能够被 Vue 追踪和响应。此时,我们可以在组件内部通过 this 访问并操作已经初始化的 data 和 methods,但组件尚未挂载到 DOM

  • 挂载阶段:

    • beforeMount: 组件挂载前调用,这时候操作不了真实DOM

    • mounted: 组件挂载到 DOM 后,此时页面呈现的是经过编译的真实DOM,可以进行 DOM 操作和初始化,但是尽量不要更改,刚挂载完成就给人家更改了?一般在此阶段开启定时器、发送网络清求、订阅消息、绑定自定义事件等初始化操作

  • 更新阶段:

    • beforeUpdate: 数据更新前调用,可做准备工作

    • updated: 数据更新完成,DOM 重新渲染避免修改数据以防止循环

  • 销毁阶段:

    • beforeDestroy: 在组件即将销毁(卸载)之前触发。这是一个很好的时机来进行一些清理工作,例如取消订阅、清除定时器、解绑事件监听器等。在这个阶段,组件仍然处于活动状态,可以访问组件的数据和方法。一旦 beforeDestroy 钩子执行完毕,组件就会被销毁,无法再通过实例访问组件的属性或方法。

    • destroyed: destroyed 生命周期钩子在组件已经销毁(卸载)之后触发。在这个阶段,组件实例以及其所有相关的 DOM 已经被完全销毁。我们可以在这个钩子中做一些清理工作,例如释放组件占用的资源、解绑全局事件监听器等。与 beforeDestroy 不同,此时无法访问组件的数据和方法,因为组件实例已经被销毁

      在destoryed这个阶段一般什么都不做,在react中没有这个阶段

  • 其他钩子:

    • activated(仅用于 keep-alive 组件):组件激活时调用

    • deactivated(仅用于 keep-alive 组件):组件停用时调用

    • errorCaptured: 捕获组件内部错误,类似于 try-catch

下面具体说明一下细节

测试时候记得配合debugger开控制台刷新使用,否则一下子执行完生命周期了:

 // data中定义了number:666
 beforeCreate() {
             console.log('实例创建前')
             console.log(this)
             debugger
         }

Vue实例中number为undefined

image-20230829105905696

下图中template和Outer 指的是哪?

image-20230827234808378

  • OuterHTML:指的就是外面绿色框框内的,div都会作为模板进行解析

  • InnerHTML:在内部的也就是InnerHTML

image-20230827231533273

  • 不进行 outer 的初始化操作可能会导致我们无法获得正确的 outerHTML 值,这个没多大影响

编译模板到渲染函数内:当我们把上述整个div清除时,就会尝试编译template作为模板进行解析,template将其完全替代渲染到页面上

created之后,beforeMounted之前,这一个阶段Vue开始解析模板,在内存中生成虚拟DOM,页面已经解析完了,但是还没有显示到页面上

image-20230828005007892

image-20230828001649675

  • beforeMount此时呈现的是未经编译的DOM结构,是不能够操作真实DOM的,所有对DOM的操作最终都不生效,控制台更改瞬时生效,执行完$el 替换之后,还是把虚拟DOM拿过来瞬间生成真实DOM插入页面(虚拟DOM是在created之后,beforeMount之前生成的虚拟DOM,所以在beforeMount这时怎么修改也只是瞬间生效)

设上端点,在页面上操作进行DOM,可以发现页面的确显示了(没有断点,根本不会看到任何变化)

image-20230828222709046

一旦点击下一步页面立即回复原样,说明了此时不能操作DOM

image-20230828223823930

  • Created VM.$el and replace "el" with it 这里用$el替换整个el容器的东西,这一步内存中的虚拟DOM转换成真实DOM,并且在VM.$el上进行存储

  • mounted此时页面呈现的是经过编译的真实DOM,可以进行 DOM 操作和初始化,但是尽量不要更改,刚挂载完成就给人家更改了?一般在此阶段开启定时器、发送网络清求、订阅消息、绑定自定义事件等初始化操作

image-20230827233721850

页面和数据尚未保持同步的是哪一个阶段?

是在beforeUpdate这个阶段,此时数据是新的,页面时旧的

image-20230828000924112

这里定义了number="666",可以看到控制台已经更新了667,页面尚未刷新

image-20230828001332886

之后就不断根据新数据生成新DOM,并与旧DOM对比,最终完成页面更新;

Model->View 数据绑定的更新

在每次数据变化触发更新时,Vue 会创建一个新的虚拟 DOM,然后将新的虚拟 DOM 与之前的虚拟 DOM 进行比较,找出差异,然后将这些差异应用于真实 DOM.

image-20230828002451008

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JRT实现缓存协议

上一篇介绍的借助ORM的增、删、改和DolerGet方法,ORM可以很精准的知道热点数据做内存缓存。那么就有一个问题存在,即部署了多个站点时候,如果用户在一个Web里修改数据了,那么其他Web的ORM是不知道这个变化的,其他Web还…

局部性原理和伪共享

CPU Cache CPU Cache可以理解为CPU内部的高速缓存。CPU从内存读取数据时,将要读取的数据及其相邻地址的数据,即至少一个Cache Line,写入Cache,以便后续访问时提高读取速度。 CPU存在多级Cache,级别最高的离CPU最近&a…

实现电商平台与营销系统无缝集成:雅座的无代码开发与API连接

无代码开发:营销的新引擎 在数字化转型的浪潮中,无代码开发已成为企业提升效率、减少成本的新引擎。这种开发方式允许非技术人员通过图形界面构建应用程序,无需编写代码即可实现复杂功能。这对于营销、广告推广以及用户运营等业务尤为重要&a…

贪心 53. 最大子序和 122.买卖股票的最佳时机 II

53. 最大子序和 题目: 给定一个数组,有正有负,找出一个连续子序列的总和最大(子数组最少一个) 暴力思路: 双层for循环,记录每一次可能的子序列的总和,初始为整数最小值&#xff…

Go语言实现大模型分词器tokenizer

文章目录 前言核心结构体定义构造函数文本初始处理组词构建词组索引训练数据编码解码打印状态信息运行效果总结 前言 大模型的tokenizer用于将原始文本输入转化为模型可处理的输入形式。tokenizer将文本分割成单词、子词或字符,并将其编码为数字表示。大模型的toke…

ArkTS-取消标题与自定义标题栏

文章目录 取消标头自定义标题栏导入Resources自定义跳转动画关于底部tabBar导航文本输入(TextInput/TextArea)自定义样式添加事件可以是onChange可以是onSubmit List列表组件设置主轴方向 网格布局服务卡片-获取地理位置页面获取地理位置服务卡片获取地理位置 可以先看看&#…

wvp 视频监控平台抓包分析

抓包时机 下面的抓包时机是抓包文件最新,但是最有用的包 选择网卡开始抓包 如果之前已经选择网卡,直接开始抓包 停止抓包 重新抓包 sip播放过程分析 过滤条件 tcp.port 5060 and sip 可以看到有这些包 选择任何一个 ,戍边右键--追踪流--…

【批处理常用命令及用法大全】

文章目录 1 echo 和 回显控制命令2 errorlevel程序返回码3 dir显示目录中的文件和子目录列表4 cd更改当前目录5 md创建目录6 rd删除目录7 del删除文件8 ren文件重命名9 cls清屏10 type显示文件内容11 copy拷贝文件12 title设置cmd窗口的标题13 ver显示系统版本14 label 和 vol设…

加密挖矿、AI发展刺激算力需求激增!去中心化算力时代已来临!

2009年1月3日,中本聪在芬兰赫尔辛基的一个小型服务器上挖出了比特币的创世区块,并获得了50BTC的出块奖励。自加密货币诞生第一天起,算力一直在行业扮演非常重要的角色。行业对算力的真实需求,也极大推动了芯片厂商的发展&#xff…

matlab三维地形图

matlab三维地形图 %%%%—————Code to draw 3D bathymetry—————————— %-------Created by bobo,10/10/2021-------------------- clear;clc;close all; ncdisp E:\data\etopo\scs_etopo.nc filenmE:\data\etopo\scs_etopo.nc; londouble(ncread(filenm,lon)); lat…

【深度学习笔记】06 softmax回归

06 softmax回归 softmax运算损失函数对数似然Fashion-MNIST数据集读取数据集读取小批量整合所有组件 softmax回归的从零开始实现初始化模型参数定义softmax操作定义模型定义损失函数分类精度训练预测 softmax回归的简洁实现 softmax运算 softmax函数能够将未规范化的预测变换为…

C语言——实现一个计算m~n(m<n)之间所有整数的和的简单函数。

#include <stdio.h>int sum(int m, int n) {int i;int sum 0;for ( i m; i <n; i){sum i;}return sum;}int main() { int m, n;printf("输入m和n&#xff1a;\n");scanf("%d,%d", &m, &n);printf("sum %d\n", sum(m, n)…

每日一题:LeetCode-202.面试题 08.06. 汉诺塔问题

每日一题系列&#xff08;day 07&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

一款LED段码显示屏驱动芯片方案

一、基本概述 TM1620是一种LED&#xff08;发光二极管显示器&#xff09;驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、基本特性 采用CMOS工艺 显示模式&#xff08;8段6位&#xff5e;10段4位&#xff…

【寒武纪(6)】MLU推理加速引擎MagicMind,最佳实践(二)混合精度

混合精度在精度损失范围内实现数倍的性能提升。 支持的量化特性 构建混合精度的流程 构建混合精度的流程如下&#xff0c;支持浮点或半精度编程&#xff0c;以及量化精度编程两种方式。 浮点或半精度 无需提供tensor分布量化编程需要设置tensor分布。 网络粒度和算子粒度的设…

LVS-NAT实验

实验前准备&#xff1a; LVS负载调度器&#xff1a;ens33&#xff1a;192.168.20.11 ens34&#xff1a;192.168.188.3 Web1节点服务器1&#xff1a;192.168.20.12 Web2节点服务器2&#xff1a;192.168.20.13 NFS服务器&#xff1a;192.168.20.14 客户端&#xff08;win11…

智能优化算法应用:基于布谷鸟算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于布谷鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于布谷鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.布谷鸟算法4.实验参数设定5.算法结果6.参考文献7.…

Unity中Shader变体优化

文章目录 前言一、在Unity中查看变体个数&#xff0c;以及有哪些变体二、若使用预定义的变体太多&#xff0c;我们只使用其中的几个变体&#xff0c;我们该怎么做优化一&#xff1a;可以直接定义需要的那个变体优化二&#xff1a;使用 skip_variants 剔除不需要的变体 三、变体…

TikTok如何破解限流?真假限流如何分辨?速来自测

Tiktok是目前增长较快的社交平台&#xff0c;也是中外年轻一代首选的社交平台&#xff0c;许多出海品牌已经看到了TikTok营销的潜力&#xff0c;专注于通过视频、电商入驻来加入TikTok这片蓝海&#xff0c;加深品牌影响力&#xff0c;获得变现。 然而TikTok新手往往都会遇到一…

基于PHP的校园兼职系统的设计与开发

基于PHP的校园兼职系统的设计与开发 摘要&#xff1a;从古代至今&#xff0c;教育都是国家培养人才的手段&#xff0c;在古代教育往往都是课堂式教育&#xff0c;在课堂内老师教导学生学习&#xff0c;而随着时间的推移&#xff0c;越来越多的在校大学生已经不满足于只在课堂上…