Vue3 Suspense:处理异步渲染过程

什么是 Vue3 Suspense?

<Suspense> 是一个内置组件,用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成,并可以在等待时渲染一个加载状态。

Vue3 Suspense 是 Vue.js(v3.2.0+)中引入的新特性,旨在提高用户体验,使得页面的加载状态更加平滑。与传统的 Loading Component 不同,Suspense 可以直接控制应用程序的状态,而不需要渲染任何 DOM。

Vue3 Suspense 是 Vue3 的一个新特性,可以优化和改善异步组件的加载过程。Vue3 Suspense 可以让我们从异步加载组件的方式中摆脱回调函数或 promise 链式调用的方式,取而代之的是使用统一的懒加载语法,将所有的异步组件声明分离出来。

当组件被加载时,如果节点还未准备好,则强制组件渲染进入暂停状态。这样可以使页面更平滑,用户不会感受到页面刷新的过程。

在 Vue 中,可以将组件通过 import 函数动态导入:

const Foo = () => import('./Foo.vue')

但是由于异步加载的组件需要一定的时间才能完成加载,因此在加载过程中页面可能会处于空白状态,这样就会给用户带来不好的体验。

在 Vue3 中,可以通过使用 Suspense 来解决这个问题。 Suspense 可以定义一些占位符,用于在异步组件加载完成前展示内容,并且可以在异步组件加载完成后自动切换到真正的组件。

Vue3 Suspense 如何优化异步组件加载?

异步请求并行加载

Vue3 Suspense 允许并行加载多个异步组件,而不是像之前版本中那样按顺序一个个加载。这样可以减少等待时间,提高加载速度和用户体验。

在以下示例中,可以看到异步组件的加载是并行的。

<template><div><h1>{{ message }}</h1><suspense><template #default><async-component></async-component><async-component></async-component><async-component></async-component></template><template #fallback>Loading...</template></suspense></div>
</template><script setup>
import { ref } from 'vue'
import AsyncComponent from './AsyncComponent.vue'const message = ref('Hello, World!')
</script></script>

在上面的代码中,定义了三个异步组件并行加载,这意味着它们将同时下载,并且不必等待前一个组件下载完成才开始下一个动态组件的下载。当组件被加载时,如果它们还没有准备好,Vue3 Suspense 会将组件渲染进入暂停状态,直到它们准备好,然后一起进行处理。

让异步组件懒加载并提前预取

Vue3 Suspense 中的另一个优化技术是让异步组件懒加载并执行提前预取。
通过懒加载,只有在使用时才会加载组件,而不是在页面初始加载时就把所有组件都加载好。
通过执行提前预取,可以在没有等待用户点击前提前加载组件,以确保在需要时可以立即使用。
以下示例演示了如何在 Vue3 Suspense 中懒加载并执行提前预取异步组件:

<template><div><h1>{{ message }}</h1><suspense><template #default><async-component></async-component></template><template #fallback>Loading...</template></suspense></div>
</template><script setup>
import { ref, onMounted } from 'vue'
import AsyncComponent from './AsyncComponent.vue'const message = ref('Hello, World!')onMounted(async () => {const component = await AsyncComponent()component.__requestInterception = true // 开启拦截,提前预取component.__navigate('preload') // 提前预取
})
</script>

在上面的代码中,定义了一个异步组件,并在 onMounted 生命周期钩子函数中执行了提前预取操作。这样做可以在用户交互之前,即页面加载时就预先请求好组件,以提高用户体验。

如何在 Vue3 中使用 Suspense?

要使用 Vue3 Suspense,我们需要遵循以下三个基本步骤:

  1. 使用 标记包裹异步组件。
  2. 在默认的 标签中声明包含异步组件的标记。
  3. 在fallback 的 标签中加入等待的提示信息。

以下是一个简单的 Vue3 Suspense 示例:

<template><div><h1>{{ message }}</h1><suspense><template #default><async-component></async-component></template><template #fallback>Loading...</template></suspense></div>
</template><script setup>
import { ref } from 'vue'
import AsyncComponent from './AsyncComponent.vue'const message = ref('Hello, World!')
</script>

在上面的代码段中,首先使用 标记包裹了异步组件。然后,在默认模板标签中,声明了要渲染的异步组件,同时在 fallback 的模板标签中加入了“Loading…”提示信息。
在 Vue3 Suspense 中,用户体验更加友好,因为它可以让用户看到一个较为友好的提示信息,告诉用户正在努力加载,这样就不会让用户感到程序出现了错误或者挂起。

总结

Vue3 Suspense 是 Vue3 的一个新特性,它可以优化和改善异步组件的加载过程并提高用户体验。通过并行加载和懒加载并执行提前预取等技术,Vue3 Suspense 可以减少等待时间,提高加载速度。

使用 Vue3 Suspense 非常简单,只需要在模板中使用 标记包裹异步组件,并在默认的模板标签中声明异步组件,并在 fallback 的模板标签中加入等待提示信息。

在实际应用程序中,可以根据自己的需要结合其他技术来优化异步组件的加载。例如,可以将其与 Vue Router 和 Vuex 结合使用,来达到更好的效果。在使用 Suspense 时,需要注意:

  • Suspense 组件必须包裹需要异步加载的组件。
  • 需要定义 fallback 模板,用于在异步组件加载完成前展示 Loading 状态。
  • 可以使用 Teleport 元素将组件渲染到指定的 DOM 节点中。
  • 需要根据具体情况,结合 Vue Router 和 Vuex 构建完整的异步组件加载方案。

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

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

相关文章

使用 .NET 6 或 .NET 8 上传大文件

如果您正在使用 .NET 6&#xff0c;并且它拒绝上传大文件&#xff0c;那么本文适合您。 我分享了一些处理大文件时需要牢记的建议&#xff0c;以及如何根据我们的需求配置我们的服务&#xff0c;并提供无限制的服务。 本文与 https://blog.csdn.net/hefeng_aspnet/arti…

STM32使用UART发送字符串与printf输出重定向

首先我们先看STM32F103C8T6的电路图 由图可知&#xff0c;其PA9和PA10引脚分别为UART的TX和RX(注意&#xff1a;这个电路图是错误的&#xff0c;应该是PA9是X而PA9是RX&#xff0c;我们看下图的官方文件可以看出)&#xff0c;那么接下来我们应该找到该引脚的定义是什么&#xf…

转运机器人推动制造业智能化转型升级

​在当今制造业智能化转型的浪潮中&#xff0c;技术创新成为企业脱颖而出的关键。富唯转运机器人凭借一系列先进技术&#xff0c;成为智能转型的卓越之选。 一体化 AMR 控制系统是富唯的一大亮点。它采用低代码流程搭建和配置模式&#xff0c;极大地缩短了部署时间。企业无需耗…

深度分析java 使用 proguard 如何解析混淆后的堆栈

经过proguard混淆过后&#xff0c;发生异常时堆栈也进行了混淆&#xff0c;那么如果获取的原始的堆栈呢&#xff1f;我们下面来看下 使用proguard 根据mapping文件直接解析 import proguard.obfuscate.MappingReader; import proguard.retrace.FrameInfo; import proguard.re…

基于JAVA+SpringBoot+Vue的影院订票系统

基于JAVASpringBootVue的影院订票系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽兄…

LeetCode 83 :删除排链表中的重复元素

题目&#xff1a; 地址&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 方法一&#xff1a; 方法二&#xff1a; package com.zy.leetcode.LeetCode_04;/*** Author: zy* Date: 2024-12-25-15:19* Description: 删除排链表中的里复元素* …

金仓数据库-用户与角色对象权限访问的查看

数据库用户 创建用户 创建用户且设置密码 create user user01 password 123;\du 查看用户user01&#xff0c;可以看见创建成功 创建用户设置密码和不可继承 create user02 password 123 noinherit;修改用户的属性 设置用户的连接数 设置为1个 alter user user01 connect…

理解神经网络

神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;是深度学习和机器学习领域的基础。 基本原理 神经网络的基本原理是模拟人脑神经系统的功能&#xff0c;通过多个节点&#xff08;也叫神经元&#xff09;的连接和计算&#xff0c;实现非线性模型的组合和输出。每个…

联通光猫怎么自己改桥接模式?

环境&#xff1a; 联通光猫 ZXHN F677V9 硬件版本号 V9.0 软件版本号 V9.0.0P1T3 问题描述&#xff1a; 联通光猫怎么自己改桥接模式 家里用的是ZXHN F677V9 光猫&#xff0c;最近又搞了个软路由&#xff0c;想改桥接模式 解决方案&#xff1a; 1.拿到最新超级密码&…

Matrix-Breakout 2 Morpheus(找到第一个flag)

第一步 信息收集 (1)寻找靶场真实ip arp-scan -l 靶场真实 ip 为192.168.152.154 (2)探测端口及服务 nmap -p- -sV 192.168.52.135 第二步 开始渗透 (1)访问web服务 http://192.168.152.154and http://192.168.52.135:81 发现 81 端口的页面要登录 我们使用 dirb 扫描…

【CSS in Depth 2 精译_094】16.2:CSS 变换在动效中的应用(下)——导航菜单的文本标签“飞入”特效与交错渲染效果的实现

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系: rl命名空间下,主要有八大模块。 搞定VS后将逐个拆解。 1、编译运行 根据报错提示,配置相应错误的库(根据每个人安装位置不同而不同,我的路径如下:) 编译所有,Release版本耗时大约10分钟。 以rlPlan运动…

【报错】node:internal/modules/cjs/loader:936

报错问题&#xff1a; 当执行npm run dev后&#xff0c;出现下面错误 这个错误一般是由于Node.js无法找到所需的模块而引起的&#xff0c;解决此问题的一种方法就是重新安装所需的模块。 解决办法&#xff1a; 删除npm install 所下载在项目里的node_modules文件执行操作&…

Bash 脚本教程

注&#xff1a;本文为 “Bash 脚本编写” 相关文章合辑。 BASH 脚本编写教程 as good as well于 2017-08-04 22:04:28 发布 这里有个老 American 写的 BASH 脚本编写教程&#xff0c;非常不错&#xff0c;至少没接触过 BASH 的也能看懂&#xff01; 建立一个脚本 Linux 中有…

谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持

问题现象 在Chrome 高版本上的扩展管理页面&#xff08;地址栏输入chrome://extensions/或者从界面进入&#xff09;&#xff1a; &#xff0c; 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于&#xff1a;谷歌浏览器本身的扩展机制发生了…

vue2 升级为 vite 打包

VUE2 中使用 Webpack 打包、开发&#xff0c;每次打包时间太久&#xff0c;尤其是在开发的过程中&#xff0c;本文记录一下 VUE2 升级Vite 步骤。 安装 Vue2 Vite 依赖 dev 依赖 vitejs/plugin-vue2": "^2.3.3 vitejs/plugin-vue2-jsx": "^1.1.1 vite&…

决策树python实现代码1

目录 前言代码实现 前言 数据&#xff1a;Titanic.csv&#xff0c;是一份泰坦尼克号的乘客信息及获救情况的统计&#xff0c;今天先完成数据清洗部分的代码逻辑。 代码实现 # 导入第三方模块 import pandas as pd from sklearn import model_selection from sklearn.model_s…

【Go学习】从一个出core实战问题看Go interface赋值过程

0x01 背景 版本中一个同学找我讨论一个服务出core的问题&#xff0c;最终他靠自己的探索解决了问题&#xff0c;给出了初步的直接原因结论&#xff0c;"Go 中 struct 赋值不是原子的”。间接原因的分析是准确的&#xff0c;直接原因&#xff0c;我有点怀疑。当时写了一些…

RTMW:实时多人2D和3D 全人体姿态估计

单位&#xff1a;上海AI实验室 代码&#xff1a;mmpose/tree/main/projects/rtmpose 系列文章目录 RTMO: 面向高性能单阶段的实时多人姿态估计 目录 系列文章目录摘要一、背景二、相关工作2.1 自上而下的方法。2.2 坐标分类。2.3 3D Pose 3 实验方法3.1.1 任务限制3.1.3训练技…

[Visual studio] 性能探测器

最近发现VS的profile还是很好用的&#xff0c; 可以找到项目代码的瓶颈&#xff0c;比如发现CPU的每一个函数的时间占比&#xff0c;分析代码耗时分布&#xff0c;和火焰图一样的效果 如何使用 1. 打开你的项目&#xff0c;调整成release状态 2. 点击调试->性能探测器 3…