VUE3 Supense,defineAsyncComponent如何配合router-view使用
“Devil组”引证GPT后的撰写:
以下是一个简单的例子:
<template>
<Suspense>
<router-view :key="$route.fullPath" />
</Suspense>
</template>
<script>
import { defineAsyncComponent } from 'vue';
const Home = defineAsyncComponent(() => import('@/views/Home.vue'));
const About = defineAsyncComponent(() => import('@/views/About.vue'));
export default {
components: {
Home,
About,
},
};
</script>
先导入了defineAsyncComponent函数,然后用它来定义异步加载的路由组件Home和About。在模板中,用Suspense组件包裹了router-view,并将路由组件渲染到router-view中。这样,当路由组件加载时,Suspense会自动显示占位符,并处理异步加载过程中的错误。
需要注意的是,在router-view中使用了:key="$route.fullPath",这是为了确保在路由切换时重新渲染组件。这样,即使在同一个路由下切换不同的参数,也能重新渲染组件。
另外,由于用了defineAsyncComponent来定义异步加载的路由组件,因此要将这些组件在组件选项中注册,以便在使用时能够正确地被识别和加载。