在 Vue 3 中全局使用 Suspense 组件

Suspense 是 Vue 3 引入的一个内置组件,不需要引用可以直接用。用于处理异步依赖的等待状态。虽然 Suspense 主要用于异步组件,但你也可以全局地使用它来管理整个应用的加载状态。

全局 Suspense 的基本用法

1. 在根组件中使用 Suspense

// main.js 或 main.ts
import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')
<!-- App.vue -->
<template><Suspense><router-view /><template #fallback><div class="loading-indicator">加载中...</div></template></Suspense>
</template><script>
export default {name: 'App'
}
</script><style>
.loading-indicator {display: flex;justify-content: center;align-items: center;height: 100vh;font-size: 1.5rem;
}
</style>

2. 结合异步组件使用

// 路由配置示例 (router.js)
import { createRouter, createWebHistory } from 'vue-router'const Home = () => ({component: import('./views/Home.vue'),loading: LoadingComponent,  // 可选error: ErrorComponent,      // 可选delay: 200,                // 延迟显示加载组件timeout: 3000              // 超时时间
})const routes = [{ path: '/', component: Home }
]const router = createRouter({history: createWebHistory(),routes
})export default router

高级全局 Suspense 实现

1. 创建全局加载状态管理

javascript

// stores/loading.js (使用Pinia)
import { defineStore } from 'pinia'export const useLoadingStore = defineStore('loading', {state: () => ({isLoading: false,message: '加载中...'}),actions: {startLoading(message) {this.isLoading = truethis.message = message || '加载中...'},stopLoading() {this.isLoading = false}}
})

2. 创建全局 Suspense 组件

vue

<!-- components/GlobalSuspense.vue -->
<template><Suspense @pending="onPending" @resolve="onResolve" @fallback="onFallback"><slot /><template #fallback><div v-if="isLoading" class="global-loading"><div class="spinner"></div><p>{{ message }}</p></div></template></Suspense>
</template><script setup>
import { useLoadingStore } from '@/stores/loading'const loadingStore = useLoadingStore()
const { isLoading, message } = storeToRefs(loadingStore)const onPending = () => {loadingStore.startLoading()
}const onResolve = () => {loadingStore.stopLoading()
}const onFallback = () => {// 可以添加额外的回调逻辑
}
</script><style>
.global-loading {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background: rgba(255, 255, 255, 0.8);display: flex;flex-direction: column;justify-content: center;align-items: center;z-index: 9999;
}.spinner {border: 4px solid #f3f3f3;border-top: 4px solid #3498db;border-radius: 50%;width: 40px;height: 40px;animation: spin 1s linear infinite;
}@keyframes spin {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }
}
</style>

3. 在应用中使用全局 Suspense

vue

<!-- App.vue -->
<template><GlobalSuspense><router-view /></GlobalSuspense>
</template><script setup>
import GlobalSuspense from '@/components/GlobalSuspense.vue'
</script>

注意事项

  1. 错误处理:Suspense 本身不处理错误,需要使用 onErrorCaptured 或 errorCaptured 钩子

  2. 嵌套 Suspense:可以嵌套使用 Suspense,内层 Suspense 会优先于外层

  3. SSR 兼容:在服务端渲染时 Suspense 行为有所不同

  4. 组合式 API:在 setup 中使用 async 时,组件会自动成为 Suspense 的异步依赖

错误处理示例

vue

<template><Suspense><template #default><AsyncComponent /></template><template #fallback><div>Loading...</div></template></Suspense>
</template><script setup>
import { onErrorCaptured } from 'vue'
import AsyncComponent from './AsyncComponent.vue'onErrorCaptured((error) => {console.error('Error caught by Suspense:', error)// 可以在这里显示错误界面return false // 阻止错误继续向上传播
})
</script>

通过这种方式,你可以在整个 Vue 3 应用中实现统一的加载状态管理和优雅的异步处理体验。

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

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

相关文章

笔记/计算机网络

Content 计算机网络部分核心概念十大网络协议一览 计算机网络部分核心概念 1. 什么是计算机网络&#xff1f;它最基本的功能是什么&#xff1f; 计算机网络是指通过某种传输介质将多台独立的计算机或设备连接起来&#xff0c;实现数据交换和资源共享的系统。其最基本的功能是数…

时频图数据集更正程序,去除坐标轴白边及调整对应的标签值

当数据集是时频图时可能有一个尴尬的问题&#xff0c;就是数据集制作好后&#xff0c;发现有白边。 其实这也不影响训练模型&#xff0c;可能对模型训练效果的影响也是微乎其微的&#xff0c;于是大多数情况我会选择直接用整张图片训练模型。但是&#xff0c;有的情况下&#x…

mv重命名报错:bash:未预期的符号 ‘(‘附近有语法错误

文章目录 一、报错背景二、解决方法2.1、方法一&#xff1a;文件名加引号2.2、方法二&#xff1a;特殊字符前加\进行转义 一、报错背景 在linux上对一文件执行重命名时报错。原因是该文件名包含空格与括号。 文件名如下&#xff1a; aa &#xff08;1).txt执行命令及报错如下…

Unity-MMORPG内容笔记-其三

继续之前的内容&#xff1a; 战斗系统 无需多言&#xff0c;整个项目中最复杂的部分&#xff0c;也是代码量最大的部分。 属性系统 首先我们要定义一系列属性&#xff0c;毕竟所谓的战斗就是不断地扣血对吧。 属性系统是战斗系统的核心模块&#xff0c;负责管理角色的所有…

Linux入门篇学习——Linux 帮助手册

目录 一、Linux 帮助手册 1.怎么打开帮助手册 2.安装依赖 3.使用手册查看命令 一、Linux 帮助手册 1.怎么打开帮助手册 打开 ubuntu &#xff0c;输入 man 命令打开帮助手册&#xff0c;直接在控制台输入 man 就可以了&#xff0c; man 手册一共有 9 页&#xff0c…

2025年后端主流框架对比和竞争格局及趋势发展

2025年的后端开发呈现出云原生主导、性能革命、AI深度融合的技术格局&#xff0c;主流框架在细分领域持续分化&#xff0c;新兴技术快速渗透关键场景。以下是基于行业实践与技术演进的深度解析&#xff1a; 一、主流框架竞争态势与核心能力 1. Java生态&#xff1a;企业级市场的…

bRPC简介

bRPC基础介绍。 什么是RPC? 互联网上的机器大都通过TCP/IP协议相互访问&#xff0c;但TCP/IP只是往远端发送了一段二进制数据&#xff0c;为了建立服务还有很多问题需要抽象&#xff1a; 数据以什么格式传输&#xff1f;不同机器间&#xff0c;网络间可能是不同的字节序&am…

力扣网C语言编程题:在数组中查找目标值位置之二分查找法

一. 简介 上一篇文章对力扣网上"有序数组中查找目标值范围"题目进行了普通的解法。文章如下&#xff1a; 力扣网C语言编程题&#xff1a;在数组中查找目标值位置之暴力解法-CSDN博客 本文使用二分查找法进行实现&#xff0c;因为二分查找法符合题目要求&#xff0…

前端查询条件加密传输方案(SM2加解密)

一、需求背景 控台项目甲方进行安全测试&#xff0c;测试报告其中一条&#xff1a;敏感信息明文传输 1 敏感信息明文传输 中危 查询接口传输手机号、银行卡号等敏感信息时未加密/脱敏处理。 二、解决方案 讨论出的方案是通过前端查询条件加密&#xff0c;后端对加密的…

【Python】Flask网页

Flask第三方库安装命令&#xff1a;pip install flask代码&#xff1a;from flask import Flask app Flask(__name__)app.route("/") def hello():return "Hello world!"if __name__ "__main__":app.run()其中的"Hello world!"可以改…

数字资产革命中的信任之锚:RWA法律架构的隐形密码

首席数据官高鹏团队律师创作&#xff0c;AI辅助 在数字经济的浪潮中&#xff0c;资产的边界正在被重新定义。当一块地产、一笔应收账款、甚至一份碳配额被转化为链上的数字代币时&#xff0c;技术的光芒固然耀眼&#xff0c;但真正决定其生命力的&#xff0c;是背后隐匿的“信…

mobaxterm终端sqlplus乱码问题解决

背景。使用mobaxterm终端连接linux。在查询数据库表注释时发现**&#xff1f;**中文乱码。影响对表的分析。完成以下三个编码设置再打开sqlplus查询含中文的数据就正常了 总结。需要查看sqlplus的编码是什么 SELECT parameter, value FROM nls_database_parameters WHERE pa…

一个简单的分布式追踪系统

1. 准备工作 导入必要的库 import contextvars import time from typing import Any, Optional, Dict, List, Union from dataclasses import dataclass, field2. 定义上下文变量 # 定义两个上下文变量&#xff0c;存储当前 Span 和 Trace _current_span: contextvars.Conte…

【Qt】事件处理、事件分发器、事件过滤器

事件处理 一. 事件事件处理鼠标事件处理按键事件处理定时器事件处理窗口事件处理 二. 事件分发器三. 事件过滤器 虽然 Qt 是跨平台的 C 开发框架&#xff0c;Qt 的很多能力其实是操作系统提供的&#xff0c;只不过 Qt 封装了系统 API&#xff0c;程序是运行在操作系统上的&…

广东省省考备考(第三十八天7.4)——言语理解:逻辑填空(题目训练)

错题解析 本题可从第二空入手&#xff0c;横线处搭配“理论”&#xff0c;且根据“使得”可知&#xff0c;横线处与前文构成因果关系&#xff0c;即“遗传学的空白和古生物证据的缺乏”导致他的理论在某些方面存在不足&#xff0c;A项“捉襟见肘”指拉一拉衣襟&#xff0c;就露…

5G网络切片技术

5G中的网络切片技术是一种通过虚拟化将单一物理网络划分为多个独立、可定制的虚拟网络的技术&#xff0c;旨在满足不同应用场景对网络性能、带宽、时延等需求的差异化要求。以下从技术原理、核心价值、应用场景、实现方式及未来趋势五个维度展开分析&#xff1a;一、技术原理&a…

算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题

在计算机科学领域&#xff0c;图论算法一直占据着重要地位&#xff0c;其中 Dijkstra 算法作为求解单源最短路径问题的经典算法&#xff0c;被广泛应用于路径规划、网络路由等多个场景。无论是算法竞赛、实际项目开发&#xff0c;还是计算机考研 408 的备考&#xff0c;Dijkstr…

汇编 函数调用栈

前言 网上很多对函数栈的解释&#xff0c;说的不是很清楚感觉&#xff0c;尤其是对到底是谁的栈&#xff0c;以及指令的微小但是很致命的细节没说&#xff0c;特写本文&#xff0c;一是帮助自己记忆&#xff0c;二是为了帮助大家&#xff0c;如有疏忽错误请指正。 核心概念 首先…

基于Apache MINA SSHD配置及应用

Apache MINA SSHD 是一个基于 Java 的 SSH 服务器和客户端实现&#xff0c;它是 Apache MINA 项目的一部分&#xff0c;提供了完整的 SSH 协议支持。 主要特性 SSH 协议支持&#xff1a; 支持 SSH2 协议 兼容大多数 SSH 客户端 支持多种加密算法和密钥交换方法 服务器功能…

Excel 如何让数据自动按要求排序或筛选?

让数据按要求排序和筛选是Excel数据处理的基础核心功能&#xff0c;也是进行有效分析前必做的准备工作。下面我们分开讲解这两个功能。 一、排序 (Sort)&#xff1a;让数据井井有条 排序的目的是重新排列数据行的顺序&#xff0c;以便更好地观察和比较。 1. 快速单列排序 (最…