Suspense组件

news2024/11/23 19:21:00

先上官网:https://cn.vuejs.org/guide/built-ins/suspense.html 

注意一下 
<Suspense> 是一项实验性功能。它不一定会最终成为稳定功能,并且在稳定之前相关 API 也可能会发生变化。

在使用了之后在浏览器控制台会有如下打印,至少目前是

 

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

就说Suspense可以直接使用的。基本使用如下: 

<Suspense>
  <template #default>
    <myComp />
  </template>
  <template #fallback>
    <h3>加载中.....</h3>
  </template>
</Suspense>

在等待异步依赖组件的时候,会先展示加载中..... 

<Suspense> 可以等待的异步依赖有两种: 

  • 带有异步 setup() 钩子的组件。这也包含了使用 <script setup> 时有顶层 await 表达式的组件。

  • 异步组件

首先看第一种,带有异步setup钩子的组件 

先看父组件: 

<template>
  <div class="main">
    <Suspense>
      <template #default>
        <A />
      </template>
      <template #fallback>
        <h3>加载中.....</h3>
      </template>
    </Suspense>
  </div>
</template>
<script setup lang="ts">
import A from "./A.vue";
</script>
<style scoped>
.main {
  width: 100%;
  height: 100%;
}
</style>

再看下子组件A.vue 

<template>
  <div class="A">
    <div>{{ user.name || '' }}</div>
    <div>{{ user.age || '' }}</div>
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue'

type Info = { name: string, age: number }
let user = ref<Info>()

function getUser(flag:Boolean = true) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(flag) {
        resolve({ name: 'wft', age: 18 })
      } else {
        reject('错错错')
      }
    }, 2000)
  })
}

try {
  user.value = await getUser(true) as Info
} catch(e) {}

</script>
<style scoped>
.A {
  width: 200px;
  height: 200px;
  margin: 20px 0 0 20px;
  border: 1px solid red;
  display: flex;
  justify-content: center;
  align-items: center;
}
.A div {
  font-size: 20px;
  color: red;
}
</style>

效果  

 

就是当我们的A组件中的异步操作未完成的时候,A组件是不会加载的

第二种就是 异步组件 

异步组件默认就是“suspensible”的。这意味着如果组件关系链上有一个 <Suspense>,那么这个异步组件就会被当作这个 <Suspense> 的一个异步依赖。在这种情况下,加载状态是由 <Suspense> 控制,而该组件自己的加载、报错、延时和超时等选项都将被忽略。

异步组件也可以通过在选项中指定 suspensible: false 表明不用 Suspense 控制,并让组件始终自己控制其加载状态。

官方:异步组件 

const B = defineAsyncComponent(() => import('./B.vue'))
const B = defineAsyncComponent(() => {
  return new Promise((resolve, reject) => {
    // ...从服务器获取组件
    resolve(/* 获取到的组件 */)
  })
})
const B = defineAsyncComponent({
  // 加载函数
  loader: () => import('./B.vue'),
  // 加载异步组件时使用的组件
  loadingComponent: LoadingComponent,
  // 展示加载组件前的延迟时间,默认为 200ms
  delay: 200,
  // 加载失败后展示的组件
  errorComponent: ErrorComponent,
  // 如果提供了一个 timeout 时间限制,并超时了
  // 也会显示这里配置的报错组件,默认值是:Infinity
  timeout: 3000
})

也是可以搭配Suspense使用的 

这里注意,我们使用defineAsyncComponent 使用异步组件、动态导入的时候,那么该组件在首屏的时候是不会加载该资源的,等我们真正用到的时候才会去加载,所以这也是一种首屏优化的方案。案例就像我们使用tabs标签页的时候,每个页签可以单独封装成自己的组件、写自己的逻辑,当点击到某个tab页签的时候再去加载对应的资源,这个时候组件就可以使用defineAsyncComponent动态导入组件

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

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

相关文章

【大数据】有关zookeeper的问题

如图&#xff0c;启动zookeeper失败&#xff0c;输入 zkServer.sh start-foreground 查看失败原因 Invalid config&#xff0c;我得知是配置文件出了问题&#xff0c;但是检查配置文件没有发现错误 最终在配置文件末尾配置参数结尾发现了未删除的空格 将三个节点配置文件中的…

C/C++ 和 Java的编译运行机制比较 个人理解

计算机程序语言按程序的执行方式可分为编译型语言和解释性语言。 编译型语言是指使用专用的编译器&#xff0c;针对某操作系统将高级语言源代码一次性地翻译成可被该系统硬件执行的机器码(包括机器指令和操作数&#xff09;&#xff0c;并包装成该系统所能识别的可执行程序的格…

同事开源我的微服务深度实践笔记到 GitHub,短短 3 天竟吸粉 1W+

说Spring成就了Java&#xff0c;Spring是Java程序员必修课之一&#xff0c;应该没人反对吧&#xff1f;前几年面试最常问的且可以顺利拿到高薪的技能是Spring&#xff0c;随着Spring体系的壮大&#xff0c;除非你在简历上添加Spring Boot和Spring Cloud的技能&#xff0c;才可以…

Kubernetes——Debug Static Pod

1. 问题背景 注意&#xff0c;我这里的Static Pod并非Kubernetes的Static Pod&#xff0c;而是需要把想要Debug的程序放到Delve环境中重新打包一个镜像。因为还有另外一种场景&#xff0c;那就是我们需要不重启Running Pod&#xff0c;为了和这种方式区分&#xff0c;才以此为…

彻底卸载并重装Anaconda环境与Python的方法

本文介绍在Windows平台下&#xff0c;彻底删除Anaconda环境与其自带Python版本&#xff0c;并进行重新安装的方法。 最近&#xff0c;由于原有Anaconda环境中的部分第三方库出现了冲突的情况&#xff0c;且基于“Anaconda Prompt (anaconda3)”也无法升级Anaconda与相关库了&am…

《超新星纪元》

《超新星纪元》 关于作者 刘慈欣&#xff0c;髙级工程师&#xff0c;科普作家&#xff0c;被誉 为"中国当代科幻第一人"。自上世纪90年代开始&#xff0c;他一边在发电厂担任计算机工程师&#xff0c;一边利用业余时间出版了13本小说集&#xff0c;连续数年获得中国…

这是一篇讲解用户行为分析的推荐书单和总结

写在前面 技术文延迟了 本来计划参加活动的还有一篇&#xff0c;应该是一篇技术翻译文&#xff0c;但是那篇文章太难了&#xff0c;看我过我以往文章的同学&#xff0c;应该能理解&#xff0c;我的文章很少有3000字数以下的&#xff0c;而且如果不是来自谷歌&#xff08;主要…

深蓝学院-多传感器融合定位课程-第9章-基于图优化的建图方法

专栏文章: 深蓝学院-多传感器融合定位课程-第1章-概述_goldqiu的博客-CSDN博客 深蓝学院-多传感器融合定位课程-第2章-3D激光里程计I_goldqiu的博客-CSDN博客 深蓝学院-多传感器融合定位课程-第3章-3D激光里程计II_goldqiu的博客-CSDN博客 深蓝学院-多传感器融合定位课程-第…

2022品牌出海:日本网红营销白皮书

日本作为世界第三大经济体&#xff0c;同时也是世界第四大电子商务市场&#xff0c;亚洲第二大消费市场&#xff0c;其经济水平和消费能力都非常出色。对出海企业来说&#xff0c;日本是一个非常有吸引力的市场。日本的网红营销市场也非常成熟&#xff0c;在疫情的影响下&#…

java设计模式之原型模式(prototype Pattern)

原型模式主要在于对象的克隆&#xff0c;所以也叫克隆模式 其实就是利用java中的Object对象中的clone方法实现一个对象的克隆。此方法需要注意的是&#xff0c;一个对象想要实现克隆&#xff0c;就必须实现一个标志性接口Cloneable 现在先来说一下浅克隆 这玩意也叫表皮克隆&…

【前端开发学习】1.前端引入和HTML标签

文章目录1.快速开发网站2. 浏览器能识别的标签2.1 编码&#xff08;head&#xff09;2.2 Title&#xff08;head&#xff09;2.3 标题&#xff08;body&#xff09;2.4 div 和 span&#xff08;body&#xff09;2.5 超链接&#xff08;body&#xff09;2.6 图片&#xff08;bod…

基于微信小程序的居民疫情服务系统springboot框架-计算机毕业设计

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;居民疫情服务系统小程序被用户普遍使用&#xff0c;为…

一个基于.Net开发齐全的加密库

网络安全&#xff0c;对于我们项目日常开发&#xff0c;是非常重要的&#xff0c;比如密码加密存储、密码加密传输、SSL证书、端对端加密等等。 这些加密算法&#xff0c;每个知识点都包含了很多内容&#xff0c;自己实现都需要花费很多时间&#xff0c;所以今天就给大家推荐一…

Qt 模型视图编程之增删行列

背景 Qt 模型视图编程中模型定义了标准接口对数据进行访问&#xff0c;可根据需求继承对应的抽象模型类来实现自定义的数据模型。一个基本的数据模型至少要实现以下虚函数&#xff1a; ①&#xff0e;rowCount&#xff1a;行数&#xff0c;返回要显示多少行&#xff1b; ②&…

net基于asp.net的社区团购网站-计算机毕业设计

项目介绍 社区团购系统依托社区团购系统和社区门店,是现在的一个重大市场和发展方向,通过研究企业在社区团购系统环境下的营销模式创新,对于普通的零售业和传统社区团购系统的转型发展具有重要的理论意义。随着互联网行业的发展,人们的生活方式发生着重大变化,人们越来越倾向于…

[附源码]Python计算机毕业设计Django酒店客房管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]Nodejs计算机毕业设计基于大学生兼职系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

前端基础(七)_表单的基本组成与使用

表单 表单&#xff1a;用于采集不同类型的用户输入数据&#xff0c;发送给服务器&#xff0c;实现用户和服务器之间的数据交互&#xff1b; 表单标签 form 用于声明表单&#xff0c;定义数据的采集范围 注意&#xff1a; 1、一个页面中可以有多个表单标签&#xff0c;但是标…

STM32F4 | 串行通信基本原理 | 串口通信实验

文章目录一、串行通信基本原理1.串行通信接口背景知识2.异步串口通信UART知识3.STM32串口数据格式和通信过程4.STM32串口框图5.波特率计算方法二、STM32F429 串口简介三、硬件设计四、软件设计五、实验现象六、STM32CubeMX 配置串口本章介绍如何使用 STM32F429 的串口来发送和…

手把手教你Spring Cloud Alibaba教程:nacos安装

我们在学习springCloud的时候用的注册中心是Eureka: springBoot集成springCloud&#xff08;一&#xff09;注册中心 但是由于houlai Eureka2.0后续不维护&#xff0c;国内就需要一个可靠的注册中心。但是换了一套后&#xff0c;有哪些不同呢 SpringCloud和SpringCloudAliba…