vue3内置组件Suspense

devtools/2024/9/23 7:19:03/

给多个异步组件提供一个统一的状态管理

使用前,有两个loading...

使用后, 只有一个loading...

Index.vue:

javascript"><script setup lang="ts">
import { onMounted, ref, defineAsyncComponent } from 'vue'
import { useRouter } from 'vue-router'
import Header from './Header.vue'
import LoadingComponent from './LoadingComponent.vue'
import ErrorComponent from './ErrorComponent.vue'
// import List from './List.vue'
// const List = defineAsyncComponent(() => import('./List.vue'))// const List = defineAsyncComponent(() => {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       let temp = import('./List.vue')
//       resolve(temp as never)
//     }, 2000)
//   })
// })const List = defineAsyncComponent({loader: () => {return new Promise((resolve, reject) => {setTimeout(() => {let temp = import('./List.vue')resolve(temp as never)}, 1000)})},loadingComponent: LoadingComponent,delay: 200,errorComponent: ErrorComponent,timeout: 3000,
})const router = useRouter()
const handleJump = (path: any) => {router.push(path)
}
onMounted(() => {})
</script><template><div><Suspense><div>me<button @click="() => handleJump('/home')">home</button><Header></Header></div><template #fallback><div>loading...</div></template></Suspense><List></List></div>
</template>

Header.vue:

javascript"><script setup lang="ts">
let res: any = { count: 0 }
res = await new Promise((resolve) => {setTimeout(() => {resolve({ count: 1 })}, 2000)
})
console.log('res', res)
import { onMounted, ref } from 'vue'onMounted(() => {})
</script><template><div>header {{ res.count }}</div>
</template>

List.vue:

javascript"><script setup lang="ts">
import { onMounted, ref } from 'vue'onMounted(() => {})
</script><template><div>list</div>
</template>

LoadingComponent.vue:

javascript"><script setup lang="ts">
import { onMounted, ref } from 'vue'onMounted(() => {})
</script><template><div>loading...</div>
</template>

官方文档

https://cn.vuejs.org/guide/built-ins/suspense.html

人工智能学习网站

https://chat.xutongbao.top


http://www.ppmy.cn/devtools/88367.html

相关文章

防松垫圈的工作原理和应用场景

防松垫圈是一种专为防止螺栓、螺母等紧固件在受到振动、冲击或其他外力作用时发生松动而设计的紧固件附件。它们广泛应用于各种机械设备、交通工具、建筑结构等领域&#xff0c;确保连接部位的安全性和可靠性。以下是防松垫圈的工作原理和典型应用场景的介绍。 工作原理 防松垫…

Vue Router 路由守卫详解

Vue Router 的路由守卫功能使我们能够在路由导航的不同阶段执行代码,提供了极大的灵活性和控制力。路由守卫可以帮助我们在用户导航到特定路由之前、之后或取消导航时执行逻辑,例如权限验证、数据获取或取消操作等。 路由守卫类型 Vue Router 提供了以下几种类型的路由守卫…

反爬虫限制:有哪些方法可以保护网络爬虫不被限制?

目前&#xff0c;爬虫已经成为互联网数据获取最主流的方式。但为了保证爬虫顺利采集数据&#xff0c;需要防范网站的反爬虫机制&#xff0c;降低IP被限制的风险&#xff0c;这样才能提高爬虫工作的效率。那么&#xff0c;如何防止网络爬虫被限制呢&#xff1f;下面介绍几种有效…

设施农业智能化新引擎:AutoML让复杂农业算法唾手可得

&#xff08;于景鑫 北京市农林科学院智能装备技术研究中心&#xff09;近年来,人工智能技术蓬勃发展,大模型呈现出肆意生长之势,为各行各业带来新机遇。AutoML作为新一代自动化机器学习技术,承载着颠覆传统、引领变革的使命,正逐渐成为现代农业的"新宠"。本文将深入…

Hadoop、Hive、HBase、数据集成、Scala阶段测试

姓名&#xff1a; 总分&#xff1a;Hadoop、Hive、HBase、数据集成、Scala阶段测试 一、选择题&#xff08;共20道&#xff0c;每道0.5分&#xff09; 1、下面哪个程序负责HDFS数据存储&#xff08; C &#xff09; A. NameNode B. Jobtracher C. DataNode D. Sec…

【vulnhub】The Ether: Evil Science靶机

靶机安装 下载地址&#xff1a;https://www.vulnhub.com/entry/the-ether-evilscience-v101,212/ 运行环境&#xff1a;Vmware 信息收集 进行IP发现 nmap 192.168.93.0/24 进行端口扫描,开放了80和22端口 nmap -A 192.168.93.155 -p- 进行目录扫描 dirsearch -u http://…

SQL进阶技巧:Hive URL解析函数详解及实际应用

目 录 0 实际业务需求 1 URL的基本组成 2 PROTOCOL 协议 3 Hive中的URL解析函数 3.1 数据准备 3.2 创建数据库 3.3 需求 3.3.1 parse_url 讲解 3.3.2 测试 3.3.3 实现需求 3.3.4 注意问题 3.5 parse_url_tuple 3.5.1 需求 3.5.2 实现需求 3.5.3 注意问题 4 小…

Redis系列之Redis Sentinel

概述 Redis主从集群&#xff0c;一主多从模式&#xff0c;包括一个Master节点和多个Slave节点。Master负责数据的读写&#xff0c;Slave节点负责数据的查询。Master上收到的数据变更&#xff0c;会同步到Slave节点上实现数据的同步。通过这种架构实现可以Redis的读写分离&…