vue3 中-suspense的使用不生效-阻塞渲染
具体问题描述:上面的tab标签切换会导致下面的路由组件切换,因为路由组件有很多异步请求最终会阻塞tab组件的渲染动画。起初打算使用suspense组件看能不能解决。但是照图片中的代码使用了suspense为没有在路由组件异步加载时展示fallback插槽中的“正在加载”字样,没有达到解决阻塞渲染的问题
vue3 中-suspense的使用不生效-阻塞渲染
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 Planetlll_hh 中午好🌞🌞🌞
本答案参考通义千问问题描述: Vue3 中使用
Suspense
组件来处理异步加载的路由组件,但预期的 "正在加载" 字样并没有在组件未加载时显示。这可能是由于以下几个原因:Suspense
配置不正确:- 没有正确设置
Suspense
的v-slot
,fallback
插槽应该被包含在<Suspense>
内部。 key
属性可能需要与路由组件的实际路径相关联。
- 没有正确设置
解决方案:
- 修复
Suspense
的配置:- 将
<template #fallback>
放入<Suspense>
标签内,确保它作为fallback
插槽内容:
- 将
<template> <div class="layout-wrap-right" ref="layoutRightRe"> <div class="tab-header"> <Tab ref="tabRef" tabList="tabList" @switchTab="handleSwitchTab" @closeTab="handleCloseTab"> ... </Tab> <div class="tab-header-right">...</div> </div> <div class="tab-main" ref="tabMainRef"> <el-scrollbar max-height="80vh"> <div class="content-wrap"> <router-view :key="$route.fullPath"> <Suspense> <transition name="slide-fade"> <keep-alive> <component :is="$route.component" key="$route.fullPath"> <!-- 原来的fallback在这里 --> <template #fallback> <span>正在加载...</span> </template> </component> </keep-alive> </transition> </Suspense> </router-view> </div> </el-scrollbar> </div> </div> </template>
-
确保
key
值唯一性:- 如果路由组件的
name
或path
可能变化,确保key
值基于这些属性,这样每次组件更新时都会重新渲染,不会阻塞渲染。
- 如果路由组件的
-
动态缓存路由组件:
- 如果某些路由组件经常被重新渲染,考虑使用
<keep-alive>
和v-if
来缓存它们,避免不必要的重新加载。
- 如果某些路由组件经常被重新渲染,考虑使用
-
检查路由守卫:
- 确保路由守卫(如
beforeRouteEnter
)没有阻塞Suspense
的渲染。如果需要在组件加载前做额外操作,可以将其移到async
函数中。
- 确保路由守卫(如
确保上述步骤后,
Suspense
应该能正确地在组件加载时显示 "正在加载" 的提示。解决 无用评论 打赏 举报
悬赏问题
- ¥20 给自己本科IT专业毕业的妹m找个实习工作
- ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
- ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
- ¥50 mac mini外接显示器 画质字体模糊
- ¥15 TLS1.2协议通信解密
- ¥40 图书信息管理系统程序编写
- ¥20 Qcustomplot缩小曲线形状问题
- ¥15 企业资源规划ERP沙盘模拟
- ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
- ¥15 前端echarts坐标轴问题