Vue3.0的新特性(8)Suspense

2023-11-19

Suspense是Vue3推出的一个内置组件,它允许我们的程序在等待异步组件时渲染一些后备的内容,可以让我们创建一个平滑的用户体验;Vue中加载异步组件其实在Vue2.x中已经有了,我们用的vue-router中加载的路由组件其实也是一个异步组件:

export default {
  name: "Home",
  components: {
    AsyncButton: () => import("../components/AsyncButton"),
  },
}

在Vue3中重新定义,异步组件需要通过defineAsyncComponent来进行显示的定义:

// 全局定义异步组件
//src/main.js
import { defineAsyncComponent } from "vue";
const AsyncButton = defineAsyncComponent(() =>
  import("./components/AsyncButton.vue")
);
app.component("AsyncButton", AsyncButton);


// 组件内定义异步组件
// src/views/Home.vue
import { defineAsyncComponent } from "vue";
export default {
  components: {
    AsyncButton: defineAsyncComponent(() =>
      import("../components/AsyncButton")
    ),
  },
};

同时对异步组件的可以进行更精细的管理:

export default {
  components: {
    AsyncButton: defineAsyncComponent({
      delay: 100,
      timeout: 3000,
      loader: () => import("../components/AsyncButton"),
      errorComponent: ErrorComponent,
      onError(error, retry, fail, attempts) {
        if (attempts <= 3) {
          retry();
        } else {
          fail();
        }
      },
    }),
  },
};

这样我们对异步组件加载情况就能掌控,在加载失败也能重新加载或者展示异常的状态:
在这里插入图片描述
[表情]异步组件加载失败
我们回到Suspense,上面说到它主要是在组件加载时渲染一些后备的内容,它提供了两个slot插槽,一个default默认,一个fallback加载中的状态:

<template>
  <div>
    <button @click="showButton">展示异步组件</button>
    <template v-if="isShowButton">
      <Suspense>
        <template #default>
          <AsyncButton></AsyncButton>
        </template>
        <template #fallback>
          <div>组件加载中...</div>
        </template>
      </Suspense>
    </template>
  </div>
</template>
<script>
export default {
  setup() {
    const isShowButton = ref(false);
    function showButton() {
      isShowButton.value = true;
    }
    return {
      isShowButton,
      showButton,
    };
  },
}
</script>

在这里插入图片描述
异步组件加载显示占位

非兼容的功能

非兼容的功能主要是一些和Vue2.x版本改动较大的语法,已经在Vue3上可能存在兼容问题了。

请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3.0的新特性(8)Suspense 的相关文章

  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • 渲染货币和符号并与来自不同单元格的数据相结合

    我正在使用最新的 jQuery DataTables v1 10 7 我正在尝试将数字解析为以下格式 239 90 USD 我可以使用此命令使货币正常工作 columns data Price render fn dataTable ren
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 引导程序提前输入未填充承诺的响应

    我的引导程序预输入如下
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 如何在生产模式下为 Chrome 扩展启用 Vue 开发工具?

    我正在构建一个 chrome 扩展 并使用 vue cli webpack 配置 我希望能够在运行后使用 vue devtoolsnpm 运行构建命令 我尝试添加Vue config devtools true 在 main js 中 或者
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • 神秘又强大的@SpringBootApplication注解

    一 前言 大部分的配置都可以用Java类 注解来代替 而在SpringBoot项目中见的最多的莫过于 SpringBootApplication注解了 它在每个SpringBoot的启动类上都有标注 这个注解对SpringBoot的启动和自
  • 解决VSCode中查看ESP32日志乱码

    问题现象 在VSCode的Monitor中查看ESP32输出的日志乱码 如下图 原因 在VSCode中IDF默认的Monitor串口波特率为460800 然而ESP32输出Log的串口波特率默认为115200 因串口波特率不匹配导致Moni
  • 墙裂推荐!pycharm装上这 14 个插件后,简直就是无敌的存在!!

    pycharm是一款强大的python集成开发环境 带有一整套python开发工具 今天就给大家介绍几款非常好用的插件 首先插件的下载方法 进入File gt Settings gt Plugins 根据需要搜索插件名称 记得是在Marke
  • jmeter 安装配置

    一 进入官网 http jmeter apache org 1 第一步进入官网如下图 2 选择进行下载 下载下来为一个压缩包 解压即可 3 下载完成后 然后就进行解压 要注意版本对应的java要求 解压完成后就要配置环境变量了 4 环境变量
  • C++中的compare比较字符串

    在C语言中的字符串比较使用的strcmp函数 但在C 中使用的是compare函数 格式 字符串A compare 字符串B 其中还可以指定子串比较 格式 A compare 0 3 B 4 3 说明字符串A中的从下标为0开始的3个字符和字
  • java中的NIO和IO

    今天看到一篇文章 其中提到了NIO 之前没使用过 今天拿出来学习下 做个个人分享 IO指的是流式处理 I对用的是Input O对应的是OutPut 也就是我们常用的IO IO流的数据来源可以是键盘 文件 网络等等 下面是其类图的划分 具体这
  • html字符实体

    比如我们想在网页上面显示一个 lt 小于符号 但是 lt 在HTML中是文档标记的开始语言 如果我们直接使用 lt 会出差错 所以我们就会一些实体名称来代替 显示结果 描述 实体名称 实体编号 空格 nbsp 160 lt 小于号 lt 6
  • python 无向图的生成

    import random n int input please input n m int input please input m v int input please input vote print int random unifo
  • Oracle联合查询详解

    联合查询 多表连接 概念 多张表连接 合并查询数据 分类 1 笛卡尔积连接 交叉连接 语法 select t1 column1 t1 column2 t2 column1 t2 column2 from table name1 t1 cro
  • CentOS在线安装MySQL,超细,易上手(附GPG密钥过期解决办法)

    MySQL 在线安装MySQL 1 下载 root localhost wget https dev mysql com get mysql57 community release el7 11 noarch rpm 2018 01 08
  • C++之模板实例化

    模板可以分为类模板与函数模板 它们的声明形式分别为 template
  • Docker下使用jstat查看jvm的GC信息

    Jstat指令 jstat命令命令格式 jstat Options vmid interval count 参数说明 Options 选项 我们一般使用 gcutil 查看gc情况 vmid VM的进程号 即当前运行的java进程号 int
  • read和write函数

    read ssize t read int fd void buf size t count fd 文件描述符 通过open获得 buf 需要读取的数据的存放位置 数组的地址 count 指定数组的大小 返回值 成功 gt 0 返回实际读取
  • 深入理解 Flutter 图片加载原理

    前言 随着Flutter稳定版本逐步迭代更新 京东APP内部的Flutter业务也日益增多 Flutter开发为我们提供了高效的开发环境 优秀的跨平台适配 丰富的功能组件及动画 接近原生的交互体验 但随之也带来了一些OOM问题 通过线上监控
  • 如何用视频制作gif动图?4种制作教学方法

    GIF动图以循环播放的形式呈现 相比于完整的视频内容 它可以将重要的瞬间或关键帧提取出来 从而简化和精简内容 所以说 动图比我们原本的视频文件呈现的内容更为活泼 生动 通过视频制作GIF动图 我们还可以运用编辑工具对视频中的场景进行裁剪 缩
  • 使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

    使用Python绘制粽子消消乐 素描图 优化版 正常 漫画 写实风格 词云图 字符画图及提取轮廓 1 效果图 2 源码 2 1 素描图源码 2 2 优化版 制作不同风格的素描图 正常 漫画 写实风格 https blog csdn net
  • 关于制作rpm包的patch的方法

    原文链接 http blkart blog 51cto com 1142352 1542533 1 准备工作 安装rpm build软件包 2 生成rpmbuild目录 以root用户登陆 执行命令 rpmbuild ba abc spec
  • 详解接口加密了怎么测?

    1 定义加密需求 确定哪些数据需要进行加密 这可以是用户敏感信息 密码 身份验证令牌等 确定使用的加密算法 如对称加密 如AES 或非对称加密 如RSA 2 生成密钥 对称加密 生成一个密钥 确保密钥的安全性和随机性 可以使用密钥生成库或算
  • Vue自定义InputNumber 计数器组件

    1 为什么要自己封装一个InputNumber 计数器组件 因为原始的el element的el input number组件有问题 原生组件能输入英文 不能限制只能输入数值 原始组件能通过键盘上的删除按钮 将数据全部删除 若提交表单的话
  • Vue3.0的新特性(8)Suspense

    Suspense是Vue3推出的一个内置组件 它允许我们的程序在等待异步组件时渲染一些后备的内容 可以让我们创建一个平滑的用户体验 Vue中加载异步组件其实在Vue2 x中已经有了 我们用的vue router中加载的路由组件其实也是一个异