• Suspense是Vue3推出的一个内置的特殊组件
  • 如果使用Suspense,要返回一个Promise

Suspense 是 vue3 中新增的组件。自带两个 slot 分别为 default、fallback。顾名思义,当要加载的组件不满足状态时,Suspense 将回退到 fallback状态,一直到加载的组件满足条件,才会进行渲染。

一、使用场景

通常组件在正确呈现之前需要执行某种异步请求是很常见的, 例如,从一个 API 异步获取数据,并希望在数据渲染之前页面还是呈现一些效果,如 loading 效果。在Vue3中可以使用 suspense 组件很简单的实现这样的需求。

二、使用

2-1 定义异步组件

  1. <template>
  2. <h1>{{result}}</h1>
  3. </template>
  4. <script>
  5. export default {
  6. setup(){
  7. return new Promise((resolve)=>{
  8. setTimeout(()=>{
  9. return resolve({result:40})
  10. },3000)
  11. })
  12. }
  13. }
  14. </script>

2-2 Suspense

  1. <template>
  2. <div>
  3. <Suspense>
  4. <template #default>
  5. <async-show/>
  6. </template>
  7. <template #fallback>
  8. <h1>Loading!...</h1>
  9. </template>
  10. </Suspense>
  11. </div>
  12. </template>
  13. <script>
  14. import AsyncShow from './components/AsyncShow.vue';
  15. export default {
  16. name: "App",
  17. components:{
  18. AsyncShow
  19. }
  20. };
  21. </script>