vue3每日一学:用实例说明如何使用Suspense加载异步数据。
Suspense使用
<template> <Suspense> <template #default> <ProductList></ProductList> </template> <template #fallback> <div>loading...</div> </template> </Suspense> </template> <script setup lang="ts" name="Cart"> import ProductList from "./ProductList.vue"; </script> <style lang="scss" scoped></style>
组件
使用 flag 与 Promise 来模拟异步加载数据,渲染成功与失败的页面效果
<!-- --> <template> <div v-if="data"> ProductList <div>data父 - {{ data }}</div> </div> <div v-if="err"> {{ err }} </div> </template> <script setup name="ProductList"> import { ref } from "vue"; const data = ref<any>(null); const flag = false; const err = ref(null); function aaa() { return new Promise((resolve) => { setTimeout(() => { if (!flag) { return resolve({ code: 0, errorMsg: "参数错误" }); } return resolve({ code: 200, data: { result: 42, }, }); }, 3000); }); } const res = await aaa(); console.log(res); if (res.code === 200) { data.value = res.data.result; } else { data.value = ""; err.value = res.errorMsg; } </script> <style scoped></style>
效果
调用请求的 loading效果
loading....
请求 返回数据时候
请求 返回错误时候
参数错误
评论0