生命周期:Vue,微信小程序

news2024/9/22 13:41:27

目录

一、vue2生命周期(钩子函数)

二、vue3生命周期(钩子函数)

三、vue-router3钩子函数(与vue2匹配)

1、全局钩子(全局守卫)

2、路由内钩子(路由独享的守卫)

3、组件内钩子(组件内的守卫)

4、完整的导航解析流程

四、vue-router4钩子函数(与vue3匹配)

1、全局钩子(全局守卫)

2、路由内钩子(路由独享的守卫)

3、组件内钩子(组件内的守卫)

4、完整的导航解析流程

五、微信小程序应用的生命周期

六、微信小程序页面的生命周期

七、微信小程序中,应用和页面的生命周期的执行顺序


一、vue2生命周期(钩子函数)

  1. 组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载,无法访问到数据和真实的dom,一般不做操作
  2. 挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取
  3. 接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...
  4. 当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿
  5. 当更新完成后,执行updated(据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom)
  6. 经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等,组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以

简洁说法:

  1. 创建前/后: 在beforeCreated阶段,vue实例的挂载元素el还没有。在created阶段,vue实例的数据对象data有了,el还没有.
  2. 载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,但还是挂载之前为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完,data.message成功渲染。
  3. 更新前/后:当data变化时,会触发beforeUpdate和updated方法。
  4. 销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在

其他三个钩子函数:

  1. 当keep-alive 缓存组件才会有的生命周期的钩子函数:activated,deactivated
  2. 当缓存组件有被显示出来时,会触发activated;当缓存的组件隐藏时,会触发deactivated
  3. errorCaptured 当子孙组件出错时,会调用这个钩子函数

二、vue3生命周期(钩子函数)

除了beforecate和created(它们被setup方法本身所取代),我们可以在setup方法中访问的API生命周期钩子有9个选项:

  1. onBeforeMount – 在挂载开始之前被调用:相关的 render 函数首次被调用。
  2. onMounted – 组件挂载时调用
  3. onBeforeUpdate – 数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。
  4. onUpdated – 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
  5. onBeforeUnmount – 在卸载组件实例之前调用。在这个阶段,实例仍然是完全正常的。
  6. onUnmounted – 卸载组件实例后调用。调用此钩子时,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。
  7. onActivated – 被 keep-alive 缓存的组件激活时调用。
  8. onDeactivated – 被 keep-alive 缓存的组件停用时调用。
  9. onErrorCaptured – 当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。
     

Vue3 为我们提供了两个可用于调试目的的钩子。

  1. onRenderTracked
  2. onRenderTriggered

这两个事件都带有一个debugger event,此事件告诉你哪个操作跟踪了组件以及该操作的目标对象和键。


三、vue-router3钩子函数(与vue2匹配)

钩子函数===导航守卫

1、全局钩子(全局守卫)

每次跳转路由时都会执行这个钩子函数,由router调用

1.1、router.beforeEach(to,from,next)(全局前置守卫)

  • beforeEach的钩子函数,它是一个全局的before 钩子函数, (before each)意思是在 每次每一个路由改变的时候都得执行一遍。
  • 应用场景:可进行一些页面跳转前处理,例如判断需要登录的页面进行拦截,做登录跳转
     

1.2、router.afterEach(to,from)(全局后置守卫)

router.afterEach是页面加载之后

参数:

  • to:到哪个路由去
  • from:从哪个路由来
  • next:判断是否进入,next 参数可以不添加,但是一旦添加,则必须调用一次,否则路由跳转等会停止。

           next有几种形式:

                    1、next():可以跳转到目标路由,进行管道中的下一个钩子

                    2、next(false):不可以跳转,回到源路由( from 路由对应的地址)

                    3、next(’/’) 或者 next({ path: ‘/’ }):中断当前跳转路径,跳转到/path指定的路由,可传递的参数与 router.push 中选项一致

                    4、next(error):导航终止(当前跳转终止),并执行router.onError()中注册过的回调。

2、路由内钩子(路由独享的守卫

指定某个特定路由跳转时的逻辑,写在某个路由配置内部

2.1、beforeEnter(to, from,next)

在路由配置上定义 beforeEnter 守卫,此守卫只在进入路由时触发,在 beforeEach 之后紧随执行,不会在 paramsquery 或 hash 改变时触发

2.2、beforeLeave(to, from,next)

3、组件内钩子(组件内的守卫

3.1、beforeRouterEnter(to, from,next)

  • 在渲染该组件的对应路由被 confirm 前调用
  • 因为当钩子执行前,组件实例还没被创建,不!能!获取组件实例 this

3.2、beforeRouterLeave(to, from)

  • 在当前路由改变,但是该组件被复用时调用。(举例:对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。)
  • 可以访问组件实例 this

3.3、beforeRouterUpdate(to, from)

  • 导航离开该组件的对应路由时调用,下一次更新之前
  • 可以访问组件实例 `this`

4、完整的导航解析流程

  • 导航被触发。
  • 在失活的组件里调用 beforeRouteLeave 守卫。
  • 调用全局的 beforeEach 守卫。
  • 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
  • 在路由配置里调用 beforeEnter。
  • 解析异步路由组件。
  • 在被激活的组件里调用 beforeRouteEnter。
  • 调用全局的 beforeResolve 守卫 (2.5+)。
  • 导航被确认。
  • 调用全局的 afterEach 钩子。
  • 触发 DOM 更新。
  • 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

四、vue-router4钩子函数(与vue3匹配)

钩子函数===导航守卫

1、全局钩子(全局守卫)

1.1、router.beforeEach(to,from,next)(全局前置守卫)

  • beforeEach的钩子函数,它是一个全局的before 钩子函数, (before each)意思是在 每次每一个路由改变的时候都得执行一遍。
  • 应用场景:可进行一些页面跳转前处理,例如判断需要登录的页面进行拦截,做登录跳转

1.2、router.beforeResolve(to, from, next)   (全局解析守卫)

  • 在路由跳转前,所有 组件内守卫 和 异步路由组件 被解析之后触发,它同样在 每次导航 时都会触发
  • 回调参数,返回值和 beforeEach 一样。也可以定义多个全局解析守卫。

1.3、router.afterEach(to,from)(全局后置守卫)

  • 发生在路由跳转完成后,beforeEach 和 beforeResolve 之后,beforeRouteEnter(组件内守卫)之前。它同样在 每次导航 时都会触发。
  • 这个钩子的两个参数和 beforeEach 中的 to 和 from 一样。然而和其它全局钩子不同的是,这些钩子不会接受 next 函数,也不会改变导航本身。

2、路由内钩子(路由独享的守卫

只有一个:    beforeEnter(to, from,next)

在路由配置上定义 beforeEnter 守卫,此守卫只在进入路由时触发,在 beforeEach 之后紧随执行,不会在 paramsquery 或 hash 改变时触发

3、组件内钩子(组件内的守卫

同vue-router3

3.1、beforeRouterEnter(to, from,next)

  • 在渲染该组件的对应路由被 confirm 前调用
  • 因为当钩子执行前,组件实例还没被创建,不!能!获取组件实例 this

3.2、beforeRouterLeave(to, from)

  • 在当前路由改变,但是该组件被复用时调用。(举例:对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。)
  • 可以访问组件实例 this

3.3、beforeRouterUpdate(to, from)

  • 导航离开该组件的对应路由时调用,下一次更新之前
  • 可以访问组件实例 `this`

4、完整的导航解析流程

  • 导航被触发。
  • 在失活的组件里调用 beforeRouteLeave 守卫。
  • 调用全局的 beforeEach 守卫。
  • 在重用的组件里调用 beforeRouteUpdate 守卫。
  • 在路由配置里调用 beforeEnter。
  • 解析异步路由组件。
  • 在被激活的组件里调用 beforeRouteEnter。
  • 调用全局的 beforeResolve 守卫。
  • 导航被确认。
  • 调用全局的 afterEach 钩子。
  • 触发 DOM 更新。
  • 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

五、微信小程序应用的生命周期

App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。
必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数。

  1. onLaunch: 初始化小程序时触发,全局只触发一次
  2. onShow: 小程序初始化完成或用户从后台切换到前台显示时触发
  3. onHide: 用户从前台切换到后台隐藏时触发
  4. onError: 小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

六、微信小程序页面的生命周期

js文件中定义了一些页面生命周期函数,下面简述下这些生命周期函数的方法作用

  1. onLoad:首次进入页面加载时触发,一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数(wx.navigateTo和wx.redirectTo及中的 query)。
  2. onShow:加载完成后、后台切到前台或重新进入页面时触发,每次打开页面都会调用一次。
  3. onReady:页面首次渲染完成时触发,一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。对界面的设置如wx.setNavigationBarTitle在onReady之后设置
  4. onHide:从前台切到后台或进入其他页面触发。当navigateTo或底部tab切换时调用
  5. onUnload:页面卸载时触发,当redirectTo或navigateBack的时候调用。

七、微信小程序中,应用和页面的生命周期的执行顺序

  1. 首次进入小程序会先触发应用生命周期中onLaunch方法和onShow方法
  2. 其次触发页面生命周期中onLoad、onShow和onReady方法
  3. 前台切换到后台时,先触发页面生命周期中onHide方法,再触发应用生命周期的onHide方法
  4. 后台切换到前台时,先触发应用生命周期中onShow方法,再触发页面生命周期的onShow方法

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

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

相关文章

Python3-字典

Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, key2 : value2, key3…

HTTP头注入

HTTP头注入HTTP Header概述HTTP报文类型HTTP请求方法HTTP Header内容HTTP Header注入HTTP Header注入实例User-Agent注入XFF注入HTTP Header概述 HTTP报文类型 请求报文:由客户端发送给服务器的消息,其组成包括请求行,请求头和请求体。响应…

区块链安全正当时|《Hyperledger Fabric2.0架构安全报告》解读

2021年,《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》将区块链纳入数字产业,对其发展作出了重要部署。同年6月中央网信办和工信部联合印发了《关于加快推动区块链技术应用和产业发展的指导意见》,提出加快区块链…

Babel-好文

ES6的很多语法在浏览器甚至node环境中无法执行,babel就是一个广泛使用的转码器,可以将ES6代码转化成ES5代码定义一个文件夹,cmd进入到其中,运行npm install -g babel-cli安装,然后可以通过babel --version查看是否安装…

odoo15 登录界面的标题自定义

odoo15 登录界面的标题自定义 原代码中查询:<title>Odoo<title> <html> <head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>Odoo</title><link rel="shortcut icon…

Jvm调优实战笔记

一、基础命令jps 查看所有java进程jinfo 进程号 查看该线程相关信息3、jstat 统计信息&#xff08;数据跟踪信息&#xff09;jstat -gc 进程号 查看该线程在内存中每一块占用的大小jstat -gc 进程号 时间&#xff08;毫秒&#xff09; 更新频率4、jstack 跟踪线程jstack 进程号…

Ethercat系列(10)用QT实现SOEM主站

首先将SOEM编译成静态Lib库可以参考前面的博文(83条消息) VS2017下编译SOEM(Simle Open EtherCAT Master)_soem vs_CoderIsArt的博客-CSDN博客make_libsoem_lib.bat "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build" x86用QT创建…

【C++】多态虚表

多态——多种形态多态的分类&#xff1a;1.静态多态&#xff1a;函数重载和运算符重载&#xff08;复用函数名&#xff09;2.动态多态&#xff1a;派生类和虚函数实现运行时多态静态多态和动态多态的区别&#xff1a;静态多态的函数地址早绑定——编译阶段确定函数地址动态多态…

页面访问升级出错怎么解决

相信大家在访问网站的时候时常会遇到页面访问界面升级&#xff0c;暂时不可能进行访问操作&#xff0c;可能遇到这种情况很多小伙伴们都不知道怎么版&#xff0c;其实互联网网页在正常使用过程中是不会出现这种问题的。那么如果遇到页面访问界面升级怎么办?页面访问界面升级通…

TryHackMe-Binex

Binex 枚举计算机并获取交互式 shell。利用 SUID 位文件&#xff0c;使用 GNU 调试器利用缓冲区溢出并通过 PATH 操作获得根访问权限。 端口扫描 循例 nmap SMB枚举 题目给了提示&#xff1a;Hint 1: RID range 1000-1003 Hint 2: The longest username has the unsecure pa…

面试中问你查看日志的命令,可不能只说tail,cat,more

首选&#xff0c;如何查看日志&#xff1a; 很多初级测试人员&#xff0c;在进行执行测试用例这个步骤时&#xff0c;发现bug&#xff0c;不能更加的准确去定位bug&#xff0c;在这样的情况下就可以打开Linux服务器&#xff0c;敲命令查看操作进行中的实时日志&#xff0c;当系…

用arthas轻松排查线上问题

你是否在项目中会碰到以下一些问题&#xff1a; 在代码中打印各种日志来排查&#xff0c;比如方法的入参&#xff0c;出参&#xff0c;及在方法体中打印日志判断走哪行代码还有你觉得代码没问题&#xff0c;可是运行出现却是以前的bug&#xff0c;感觉代码没修改&#xff0c;或…

120.(leaflet篇)区域下钻,区域钻取

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

【RocksDB】Ubuntu20.04下编译rocksdb

前言&#xff1a; 我在刚学rocksdb的时候是在2022年&#xff0c;但是网上的资源很少&#xff0c;查了好久才把rocksdb安装成功&#xff0c;在这里向大家分享一下我的经历&#xff0c;安装过程中也报了很多错误&#xff0c;希望大家不要迷路 首先 在虚拟机里面安装依赖的包以…

python List和常用的方法

List&#xff1a;列表中包含多个数据&#xff0c;数据之间使用逗号分隔&#xff0c;索引从0开始。 空列表&#xff1a; dir&#xff1a;查看列表的所有方法 List常用方法&#xff1a;insert、append&#xff0c;extend、del、remove、pop、clear、count、index 增加insert(索引…

健身房戴耳机的人都喜欢戴哪款耳机健身、最好用健身耳机推荐

对于喜欢健身和运动人群来说&#xff0c;耳机可谓是重中之重了&#xff0c;带上耳机 听着喜欢的音乐&#xff0c;沉浸在自己的世界中&#xff0c;训练状态直接拉满…但是能适合运动佩戴的耳机真的不多&#xff0c;这类耳机要同时具备舒适度、防水性、稳固性、高续航等等性能&am…

coreldraw2023安装包下载及新功能介绍

对于广告标识业来说 coreldraw这个软件&#xff0c;对我们来说绝对不陌生&#xff0c;我从2008年开始接触到广告制作&#xff0c;到现在已经13多年了&#xff0c;从一开始的coreldraw 9红色的热气球开始。就被这个强大的软件所吸引&#xff0c;他有强大的排榜功能已经对位图的处…

zigbee 抓包软件Ubiqua使用详解

zigbee抓包软件使用&#xff08;Ubiqua Protocol Analyzer&#xff09; 添加Zigbee sniffer Dongle设备 add Device>vendor选择Texas Instruments>选择Texas Instruments CC2531>add Device 设置信道 右键设置需要抓包的信道 设置秘钥 单击主菜单Tools>Opt…

arm64虚拟化学习笔记

各种虚拟化对比 虚拟化种类优缺点实现硬件加速虚拟化性能最好&#xff0c;最贵1.vcpu 2.内存stage2 3.虚拟中断 4.arch time全虚拟化纯软件实现&#xff0c;性能差1.qemu串口 2.qemu磁盘半虚拟化软件实现复杂1.Virtio block 设备 2.Virtio net 设备io虚拟化加速移植性差1.PCI设…

java是编译型语言还是解释型语言?

基本概念 什么是编译型语言&#xff1f;编译型语言的首先将源代码编译生成机器语言&#xff0c;再由机器运行机器码&#xff08;二进制&#xff09;&#xff0c;比如C和C. 编译型语言&#xff1a;程序在执行之前需要一个专门的编译过程&#xff0c;把程序编译成 为机器语言的文…