小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金
关于suspense
create by db on 2021-10-20 19:00:36
Recently revised in 2021-10-20 19:43:41闲时要有吃紧的心思,忙时要有悠闲的趣味
前言
Vue3 增加了很多让人眼前一亮的特征,suspense 组件就是其中之一,关于 suspense,可以先看一下官网介绍Vue. suspense。
suspense 对处理异步请求数据非常实用,可以简化异步请求UI的处理逻辑。 下面我们一起来看一下它是怎么使用的。
suspense 是一个试验性的新特性,其 API 可能随时会发生变动。特此声明,以便社区能够为当前的实现提供反馈。生产环境请勿使用。
一、suspense介绍及使用场景
通常组件在正确呈现之前需要执行某种异步请求是很常见的, 例如,从一个 API 异步获取数据,并希望在获取响应数据解析完时显示一些信息,如 loading 效果。在Vue3中可以使用 suspense 组件很简单的实现这样的需求。
二、suspense的用法
话不多说,我们看一下在项目中应该如何使用suspense组件。比如我们需要在接口中获取七日天气预报,而在取到数据之前需要展示 数据加载中…… de
- 创建异步组件
创建一个天气组件 WeatherForecast.vue ,我们在该组件中使用 fetch发起 HTTP 请求,通过异步 API http://www.tianqiapi.com/api 调用获取天气数据,然后展示到页面中。
其组代码如下:
<template>
<h4>{{weatherData.city}}</h4>
<div v-for="(weather, index) in weatherData.data"
:key="index">
日期:{{ weather.date }}
天气:{{ weather.wea_day }}
</div>
</template>
<script>
import { ref } from "vue";
export default {
name: "WeatherForecast",
async setup() {
const weatherData = ref(null);
const headers = { "Content-Type": "application/json" };
// 在 `setup` 内部使用 `await` 需要非常小心
// 因为大多数组合式 API 函数只会在
// 第一个 `await` 之前工作
const fetchweatherData = await fetch("http://www.tianqiapi.com/api?version=v9&appid=23035354&appsecret=8YvlPNrz", {
headers,
});
weatherData.value = await fetchweatherData.json();
return { weatherData };
},
};
</script>
- 使用 suspense 显示数据加载中的信息
-
创建一个父组件
WeatherForec.vue, 引入子组件WeatherForecast.vue -
使用
<Suspense></Suspense>包裹所有异步组件相关代码 -
<Suspense></Suspense>下<template #default></template>插槽包裹异步组件 -
<Suspense></Suspense>下<template #fallback></template>插槽包裹渲染异步组件之前的内容
其代码如下:
<template>
<div>
<h1>七日天气预报</h1>
</div>
<!-- <suspense> 组件有两个插槽。它们都只接收一个直接子节点。
default 插槽里的节点会尽可能展示出来。
如果不能,则展示 fallback 插槽里的节点。 -->
<suspense>
<template #default>
<WeatherForecast />
</template>
<template #fallback>
<h3>数据加载中……</h3>
</template>
</suspense>
</template>
<script>
import WeatherForecast from "@/components/WeatherForecast.vue";
export default {
name: "App",
components: {
WeatherForecast
},
};
</script>
从上面的代码片段中,使用组件 suspense 可以很简单就实现了 loading 的效果,带有 #default 为初始化模板组件,显示异步请求完成之后的 UI 。带有 #fallback 为异步请求中的处理 UI ,即常见的 loading 效果。
与诸君共勉,为自己加油!
参考文档
后记:Hello 小伙伴们,如果觉得本文还不错,记得点个赞或者给个 star,你们的赞和 star 是我编写更多更丰富文章的动力!GitHub 地址
文档协议
db 的文档库 由 db 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于github.com/danygitgit上的作品创作。
本许可协议授权之外的使用权限可以从 creativecommons.org/licenses/by… 处获得。