VUE 跳转至某一页面后 再跳转至其他页面出现空白 刷新后正常显示的问题解决

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

VUE 跳转至某一页面后 再跳转至其他页面出现空白 刷新后正常显示的问题解决


今天测试项目的时候出现了这个问题,搞了我好几个小时,原来一直以为是路由出了问题,看了半天也没解决,结果最后发现问题很简单,唉!

检查一下template最外层的div是不是被误删了,如果误删了或者没加上,加上即可,示例如下:

改前:
在这里插入图片描述
改后
在这里插入图片描述
希望可以帮遇到相同问题的童鞋们节约时间吧!

<think>好的,我现在需要解决用户在Vue3中遇到的动态路由页面刷新后出现空白问题。首先,我得回顾下用户提供的引用内容,看看其他开发者是怎么处理类似问题的。 根据引用[1],用户在Vue3中遇到动态路由刷新后找不到路由导致空白页。他们提到动态路由的实现方法,可能需要确保路由在刷新后仍然存在。引用[2]指出,动态路由在第次进入正常,但刷新空白,这可能是因为路由没有被正确持久化或重新加载。引用[3]则建议在首屏加载时请求动态路由并缓存,同时确保首页是静态路由,这样在刷新时可以从缓存中恢复路由。 接下来,我需要结合这些信息,整理出Vue3中的解决方案。Vue3使用Vue Router 4,可能的路由添加方式与Vue2不同。首先,动态路由应该在应用初始化时从持久化存储(如localStorage)中获取,并在路由配置前添加。这样可以确保刷新时路由已经存在。 然后,权限验证守卫中,需要处理动态路由的加载。在用户登录后,获取路由数据并存储到localStorage,然后通过router.addRoute动态添加。但要注意,添加路由后可能需要跳转到目标路由或回到首页,避免空白。 另外,404页面的处理也很重要。如果动态路由未正确添加,访问不存在的路径会导致404,所以通配符路由应放在最后,确保其他路由先被匹配。 还要考虑路由缓存的时机,确保在应用启动时从缓存中读取路由,并在每次更新路由时更新缓存。同时,使用router.isReady()来等待路由就绪后再挂载应用,防止初始渲染时路由未加载完成。 可能的问题点包括:未正确使用addRoute方法,缓存时机不当,路由顺序错误,或者未处理路由重定向。需要逐检查这些方面,确保动态路由在刷新后能正确恢复,避免空白页。 最后,生成相关问题,帮助用户进步理解和排查问题。比如如何持久化路由,如何处理404,如何优化加载速度等。</think>在Vue3中解决动态路由刷新后出现空白页的问题,需要结合路由持久化、初始化加载顺序和缓存策略。以下是具体解决方案: ### 、核心解决步骤 1. **路由持久化存储** - 登录后立即将接口返回的动态路由数据存入`localStorage` ```typescript localStorage.setItem('dynamicRoutes', JSON.stringify(apiRoutes)) ``` 2. **初始化加载路由(关键)** ```typescript // router/index.ts const router = createRouter({...}) // 从缓存加载动态路由 const cachedRoutes = localStorage.getItem('dynamicRoutes') if (cachedRoutes) { const dynamicRoutes = JSON.parse(cachedRoutes) dynamicRoutes.forEach(route => { router.addRoute(route) // Vue3新增的API }) } ``` 3. **路由守卫处理** ```typescript router.beforeEach(async (to, from) => { if (!hasAuthToken()) return '/login' if (!hasLoadedRoutes) { const routes = await fetchRoutes() routes.forEach(route => router.addRoute(route)) localStorage.setItem('dynamicRoutes', JSON.stringify(routes)) return to.fullPath // 重定向到原始目标路径 } }) ``` 4. **确保首页静态化(必要前提)** ```typescript // 必须保证首页路由是静态声明 const staticRoutes = [ { path: '/', component: Home }, { path: '/login', component: Login } ] ``` ### 二、关键配置项 1. **404处理策略** ```typescript // 必须放在最后声明 { path: '/:pathMatch(.*)*', component: NotFound, meta: { isDynamic: true } } ``` 2. **白屏防护措施** ```typescript // main.ts router.isReady().then(() => { app.mount('#app') }) ``` ### 三、优化方案 1. **路由缓存更新机制** ```typescript watch(router.getRoutes(), (newVal) => { localStorage.setItem('routeCache', JSON.stringify(newVal)) }, { deep: true }) ``` 2. **路由加载状态管理** ```typescript let isRouteLoaded = false router.beforeEach((to) => { if (!isRouteLoaded && to.path !== '/login') { return { path: '/loading' } // 添加过渡页面 } }) ``` [^1][^2][^3]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值