vue3 中-suspense的使用不生效-阻塞渲染
具体问题描述:上面的tab标签切换会导致下面的路由组件切换,因为路由组件有很多异步请求最终会阻塞tab组件的渲染动画。起初打算使用suspense组件看能不能解决。但是照图片中的代码使用了suspense为没有在路由组件异步加载时展示fallback插槽中的“正在加载”字样,没有达到解决阻塞渲染的问题
vue3 中-suspense的使用不生效-阻塞渲染
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-02-28 12:06关注
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
应该能正确地在组件加载时显示 "正在加载" 的提示。解决 无用评论 打赏 举报
悬赏问题
- ¥100 需要跳转番茄畅听app的adb命令
- ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
- ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
- ¥50 opencv4nodejs 如何安装
- ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
- ¥15 nginx反向代理获取ip,java获取真实ip
- ¥15 eda:门禁系统设计
- ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
- ¥15 376.1电表主站通信协议下发指令全被否认问题
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证