问题:vue3 路由切换后,页面不显示内容,刷新后正常显示(路由切换白屏的问题)
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
问题
在项目开发中,有一个页面出现跳转其他页面不显示的问题,但刷新后页面时正常显示的,其他页面跳转该页面是可以展示的问题
分析
解决办法:
在router-view 中给路由添加key标识。
!!注意:有使用layout封装布局的,是在layout下的主页面中的 router-view 添加标识,不是在src根目录下main.vue中修改(在这个文件修改会造成每次切换路由导航标签都会收起)
<script setup lang="ts">
import { useTagsViewStore } from "@/store/modules/tagsView";
import { useRoute} from "vue-router";
const tagsViewStore = useTagsViewStore();
const route = useRoute();
const key = computed(() => {
return route.path + Math.random();
});
</script>
<template>
<section class="app-main">
<router-view v-slot="{ Component, route }" :key="key">
<transition name="router-fade" mode="out-in">
<keep-alive :include="tagsViewStore.cachedViews">
<component :is="Component" :key="route.fullPath" />
</keep-alive>
</transition>
</router-view>
</section>
</template>
问:为什么要加 key 呢?
答:
- 在 Vue 中,当路由切换时,如果不添加 key 属性,Vue 会尝试复用相同组件实例,这可能导致一些不可预料的问题,特别是在复杂的布局下。因为复用组件实例可能会导致之前组件的状态和数据被保留,而不是重新渲染组件。
- 通过为
<router-view>
添加 key 属性,你告诉 Vue 在切换路由时强制销毁当前组件实例,并创建一个新的实例。这样做可以确保每次路由切换时都会重新渲染组件,从而避免页面空白的问题。- 具体来说,为
<router-view>
添加 key 属性可以确保 Vue 在渲染路由组件时,根据 key 的不同值来判断是否创建新的组件实例,而不是尝试复用之前的组件实例。这样可以确保每次路由切换都会得到一个全新的组件实例,从而避免出现页面空白的情况。
GitHub 加速计划 / vu / vue
80
16
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 6 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 6 个月前
更多推荐
已为社区贡献12条内容
所有评论(0)