← 返回首页
Vue3基础教程(三十九)
发表时间:2021-08-15 19:11:12
Suspense

1.Suspense Suspense组件是Vue3中的新增功能之一。 它们允许我们的应用程序在等待异步组件时渲染一些后备内容,可以让我们创建一个平滑的用户体验。 值得庆幸的是,Suspense组件非常容易理解,它们甚至不需要任何额外的导入!

注意:如果使用Suspense,需要返回一个Promise对象。

实例:

在public/data/目录里添加测试请求数据,user.json

{
    "uid":"54665776845333",
    "username":"admin",
    "type":"guest",
    "password":"123456"
}

AsyncComponent.vue

<template>
    <h2>这里是一个异步组件</h2>
    <p>{{userInfo}}</p>
</template>

<script>
    import axios from 'axios'
    import { defineComponent, ref } from "vue";
    export default {
        name: "AsyncComponent",
        async setup() {
            const userInfo = ref('');
            const result = await axios.get('/data/user.json')
            console.log(result.data);
            return {
                userInfo: result.data
            }
        }
    }
</script>

<style scoped>

</style>

App.vue

<template>
    <h2>Suspense演示案例</h2>
    <div>
        <Suspense>
            <template #default>
                <div>
                    <AsyncComponent/>
                </div>
            </template>
            <template #fallback>
                <h1>LOADING...</h1>
            </template>
        </Suspense>
    </div>
</template>

<script lang="ts">
    import {
        defineComponent,
        defineAsyncComponent
    } from 'vue'

    //静态引入组件
    //import AsyncComponent from '@/components/AsyncComponent.vue'
    //注意:必须采用动态引入方式才可以显示Suspense的内容
    //动态引入组件
    const AsyncComponent = defineAsyncComponent(() => import('@/components/AsyncComponent.vue'))
    export default {
        name: 'App',
        components: {
            AsyncComponent
        },
        setup() {
            return {}
        }
    }

</script>
<style>
    #app {
        height: 100%;
        margin: 0;
        padding: 0;
        border: 0;
    }

    /*解决微信浏览器背景默认灰色问题*/
    body, html {
        background: #ffffff
    }
</style>