【VUE】vue3学习笔记(异步组件,包含defineAsyncComponent、Suspense的使用)

article/2025/10/13 3:50:06

🐱 个人主页:不叫猫先生
🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!
💫优质专栏:vue3 + vite + TypeScript 从入门到实践
📢 资料领取:前端进阶资料可以找我免费领取
🔥 摸鱼学习交流:我们的宗旨是在工作中摸鱼,摸鱼中进步,期待大佬一起来摸鱼(文末有我wx或者私信)。

异步组件

按需引入,用到的时候再加载,异步组件的引入需要用defineAsyncComponent进行注册。defineAsyncComponent工厂函数需要返回一个Promise对象,接收对象类型,对异步函数进行设置。

const AsyncFooWithOptions = defineAsyncComponent({loader: () => import("./demo.vue"),//加载过程中的组件loadingComponent: LoadingComponent,//加载失败的组件errorComponent: ErrorComponent,// 在显示loadingComponent组件之前, 等待多长时间delay: 200,//加载组件的超时时间,如果超过这个值,则显示错误组件, 默认Infinity永不超时, 单位mstimeout: 3000//定义组件是否可以挂起, 默认truesuspensible:true,/** 异步组件加载失败的回调函数* err: 错误信息,* retry: 函数, 调用retry尝试重新加载* fail: 函数, 指示加载程序结束退出* attempts: 记录尝试的次数*/onError: function(err, retry, fail, attempts) {}
})

监控异步组件的显示

组件中的数据,需要在用到的时候再去加载,实现数据懒加载,可以用第三方插件@vueuse/core 为我们提供的useIntersectionObserver方法。首先安装

npm i @vueuse/core -S

该方法包括三个参数:

  • 参数1:ref引用,获取DOM,需要是组件的最外层div元素;
  • 参数2:回调,回调里面的参数 isIntersecting 监听组件是否进入可视区域
  • 参数3:DOM 元素进入可视区域的距离从 0 - 1。

内置组件Suspense

异步组件请求数据时需要用到内置组件<Suspense>,Suspense是vue3推出的一个内置组件,在等待异步组件时渲染一些后备的内容。它提供了两个slot插槽,一个default默认,一个fallback加载中的状态。

vue.2.x与vue3.x异步组件的区别

vue中加载异步组件其实在vue2.x中已经有了,我们用的vue-router中加载的路由组件其实也是一个异步组件。

  • vue 3.x 新增一个辅助函数defineAsyncComponent,用来显示声明异步组件;
  • 异步组件高级声明方法中的 component 选项更名为loader;
  • loader绑定的组件加载函数不再接收resolve和reject参数,而且必须返回一个Promise;

vue2.x

export default {name: "Home",component: (resolve) => require(['@/views/commonPage/previewPage'], resolve),},
}

vue3.x

易出错点:

  • 异步组件中有异步请求数据时必须要使用<Suspense>,否则会报错,影响异步组件显示。
    在这里插入图片描述
  • 使用<script setup>可以直接使用await,因为<script setup>默认就是异步的,相当于async setup(){},所以可以直接在里面写await,而在使用setup函数时,需要async await一起使用。

c.vue

<template><div><h1>C组件==>{{ list }}</h1><img src="../assets/img.png" style='width:300px;height: 300px;'></div>
</template>
<script setup>
import axios from 'axios';
let list = ref([]);
let res = await axios.get('xxxxxxx');
list.value = res.data.data.list
</script>

home.vue

<template><A></A><B></B><div ref='target'><Suspense v-if='targetIsVisible'><template #default><C></C></template><template #fallback>加载中...</template></Suspense></div>
</template>
<script setup>
import A form './A';
import B form './B'
import { useIntersectionObserver } from '@vueuse/core'
const C = defineAsyncComponent(() =>import('../components/C.vue')
)
const target = ref(null);
const targetIsVisible = ref(false);
const { stop } = useIntersectionObserver(target,([{ isIntersecting }]) => {//isIntersecting 是否进入可视区域if( isIntersecting ) {targetIsVisible.value = isIntersecting;}},
)
</script>

异步组件分包机制

  • 组件A、组件C异步引入后打包会从index.js分离开来
const A = defineAsyncComponent(() =>import('../components/A.vue')
)
import B from '../components/B.vue'
const C = defineAsyncComponent(() =>import('../components/C.vue')
)

在这里插入图片描述

  • 组件A、B、C直接引入,打包后内容全在index.js中
import A from '../components/A.vue'
import B from '../components/B.vue'
import C from '../components/C.vue'

在这里插入图片描述


http://chatgpt.dhexx.cn/article/74sMmQKe.shtml

相关文章

Vue3——Suspense组件

Suspense组件 官网中有提到他是属于实验性功能&#xff1a; <Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化。 <Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我…

vue3中的Suspense

1、Suspense作用 等待异步组件时渲染一些额外内容&#xff0c;让应用有更好的用户体验 2、使用步骤 使用步骤&#xff1a; 异步引入组件 import {defineAsyncComponent} from vue const Child defineAsyncComponent(()>import(./components/Child.vue)) 使用Suspense包裹组…

react-Suspense工作原理分析

Suspense 基本应用 Suspense 目前在 react 中一般配合 lazy 使用&#xff0c;当有一些组件需要动态加载(例如各种插件)时可以利用 lazy 方法来完成。其中 lazy 接受类型为 Promise<() > {default: ReactComponet}> 的参数&#xff0c;并将其包装为 react 组件。React…

vue3新增Suspense组件

在开始介绍Vue的Suspense组件之前&#xff0c;我们有必要先了解一下React的Suspense组件&#xff0c;因为他们的功能类似。 React React 16.6 新增了 <Suspense> 组件&#xff0c;让你可以“等待”目标代码加载&#xff0c;并且可以直接指定一个加载的界面&#xff08;…

Suspense组件

先上官网&#xff1a;https://cn.vuejs.org/guide/built-ins/suspense.html 注意一下 <Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化。 在使用了之后在浏览器控制台会有如下打印&#xff0c;至少目前是…

详解Vue3 Suspense:是什么?能干什么?如何用?

本篇文章带大家深入了解一下Vue3 Suspense&#xff0c;聊聊Suspense是什么、能干什么&#xff0c;以及如何使用它&#xff0c;希望对大家有所帮助&#xff01; Suspense 不是你想的那样。是的&#xff0c;它帮助我们处理异步组件&#xff0c;但它的作用远不止于此。&#xff0…

Vue3.0的新特性(8)Suspense

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

实现分布式锁的解决方案

目录 1. 分布式锁1.1 什么是分布式锁1.2 为什么要使用分布式锁1.3 分布式锁应具有的特性 2 分布式锁实现方案2.1 数据库实现分布式锁2.2 ZooKeeper实现分布式锁2.3 Redis实现分布式锁2.3.1 版本一2.3.2 版本二2.3.3 版本三 3. Redisson3.1 Redisson介绍3.2 Redisson分布式锁使用…

什么是分布式锁,分布式锁有什么作用?

1 、什么是分布式锁 为了防止分布式系统中的多个进程之间相互干扰&#xff0c;我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。 2、为什么要使用分布式锁 成员变量 A 存在 JVM1、JVM2、JVM3 三个 JVM 内存中&#xff1b…

分布式锁以及三种加锁方式

在很多场景中&#xff0c;我们为了保证数据的最终一致性&#xff0c;需要很多的技术方案来支持&#xff0c;比如分布式事务、分布式锁等。那具体什么是分布式锁&#xff0c;分布式锁应用在哪些业务场景、如何来实现分布式锁呢&#xff1f; 一 为什么要使用分布式锁 我们在开发…

分布式架构 --- 分布式锁

分布式锁 1. 研究背景及其意义2. 分布式锁的介绍2.1 分布式锁2.2 为什么需要分布式锁2.3 分布式锁的基本要求 3. 分布式锁的实现3.1 基于数据库的分布式锁3.1.1选用数据库实现分布式锁的原因3.1.2 基于数据库实现分布式锁的缺点3.1.3分布式锁的实现 3.2 基于Redis的分布式锁3.2…

分布式锁的区别

分布式锁&#xff0c;是一种思想&#xff0c;它的实现方式有很多。比如&#xff0c;我们将沙滩当做分布式锁的组件&#xff0c;那么它看起来应该是这样的 加锁 在沙滩上踩一脚&#xff0c;留下自己的脚印&#xff0c;就对应了加锁操作。其他进程或者线程&#xff0c;看到沙滩上…

分布式锁的实现方式

背景 分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09…

分布式锁-Redisson

分布式锁 1、分布式锁1.1 本地锁的局限性1.1.1 测试代码1.1.2 使用ab工具测试(单节点)1.1.3 本地锁问题演示(集群情况) 1.2 分布式锁实现的解决方案1.3 使用Redis实现分布式锁(了解即可)1.3.1 编写代码1.3.2 压测 1.4 使用Redisson解决分布式锁1.4.1 实现代码1.4.1 压测1.4.2 可…

Redis 分布式锁

文章目录 一、分布式锁概念二、使用setnx实现锁三、编写代码测试分布式锁1. 使用Java代码测试分布式锁2. 优化之设置锁的过期时间 四、优化之给lock设置UUID防误删五、使用LUA脚本保证删除的原子性 一、分布式锁概念 随着业务发展的需要&#xff0c;原单机部署的系统被演化成分…

关于分布式锁

先别说了别的&#xff0c;先来一个总结。 synchronized 单机版可以&#xff0c;但是上了分布式就不行了。 nginx 分布式服务单机锁就不行 取消单机锁&#xff0c;上redis分布式锁setnx 注意的问题&#xff1a; 如果只加了锁&#xff0c;没有释放锁&#xff0c;出现异常的话…

Redisson分布式锁详解

概述 setnx分布式锁的问题 重入问题 重入问题是指获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;它的方法都是使用synchronized修饰的&#xff0c;假如它在一个方法内&#xff0c;…

redission实现分布式锁

在开始提到Redis分布式锁之前&#xff0c;先说一下redis中的两个命令。 SETNX key valuesetnx 是SET if Not eXists(如果不存在&#xff0c;则 SET)的简写。 用法如图&#xff0c;如果不存在set成功返回int的1&#xff0c;这个key存在了返回0。 SETEX key seconds value上面…

Java分布式锁

文章目录 1.什么是锁&#xff1f;2.什么是分布式&#xff1f;分布式场景 3.什么是分布式锁&#xff1f;4.我们应该怎么设计分布式锁&#xff1f;5.基于数据库的分布锁5.1 基于表主键唯一做分布式锁5.2 基于表字段版本号做分布式锁 6.基于 Redis 做分布式锁6.1 基于 REDIS 的 SE…

Redis分布式锁

概述 日常开发中&#xff0c;秒杀下单、抢红包等等业务场景&#xff0c;都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开&#xff0c;跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方&#xff0c;欢迎大家指出哈&#xff0c;一起学习一…