Suspense
Vue3中的Suspense是Vue3中新增的一个组件,它的作用是实现延迟加载和错误处理。在组件中加入Suspense,可以让异步组件可以渲染出加载状态,并且如果异步组件加载时出现错误,也能够处理这些错误。
Suspense可以让我们在异步组件加载的同时展示一个占位符,使用户获得更好的加载体验。
defineAsyncComponent
在使用vue-cli构建项目,在默认情况下,执行 npm run build/yarn build会将所有的js打包成一个整体,vue为单页面应用,同步加载大量的页面代码会导致页面长时间处于空白情况。 使用该方法来异步加载所需页面来提升加载速度。 此适用于项目比较大的情况下,如果就只有几个页面的情况,不建议使用该功能
通过实际的应用场景,例如延迟加载大型组件、优化用户体验等,展示Suspense和异步组件如何在真实项目中发挥作用。
<template>
<div class="app">
<Suspense>
<template #default>
<AsyncComponent />
</template>
<template #fallback>
<LoadingSpinner />
</template>
</Suspense>
</div>
</template>
<script>
import { defineAsyncComponent, Suspense } from 'vue';
// 异步加载的组件
const AsyncComponent = defineAsyncComponent(() =>
import('./components/AsyncComponent.vue')
);
// 加载中的占位符组件
const LoadingSpinner = defineAsyncComponent(() =>
import('./components/LoadingSpinner.vue')
);
export default {
components: {
AsyncComponent,
LoadingSpinner
}
};
</script>
我们有两个异步加载的组件:AsyncComponent 和 LoadingSpinner。我们使用 defineAsyncComponent 来定义这些异步组件。然后,我们在父组件中使用 Suspense 组件,将默认内容包裹在 template #default 中,将加载中状态包裹在 template #fallback 中。
当 AsyncComponent 正在加载时,Suspense 组件会显示 LoadingSpinner 组件,直到异步组件加载完成并准备就绪,然后再显示 AsyncComponent 的内容。
在这种场景下,Suspense 可以帮助我们实现更好的加载体验。读者在等待异步组件加载时,可以看到明确的加载状态,而不是一片空白。这有助于减少用户的不确定性,提升用户体验。