Skip to content

Async 异步状态 ​

简介 ​

把「加载中 / 空数据 / 出错 / 有数据」四种状态收在一处,省掉每个页面重复的 v-loading、v-if="empty" 和 catch 重试。默认带骨架屏、空状态和错误重试。

代码演示 ​

基础使用 ​

配合 useFetch ​

state 直接接 useFetch() 的返回值,data 会透传给默认插槽:

vue
<script setup lang="ts">
import { useFetch } from 'cosey';

const fetch = useFetch(getUsers);
</script>

<template>
  <co-async :state="fetch">
    <template #default="{ data }">
      <co-table :data="data" />
    </template>
  </co-async>
</template>

API ​

AsyncProps ​

属性描述类型默认值
stateuseFetch() 的返回值,包含 isFetching / data / error / executeobject-
loading单独控制加载态,优先级高于 stateboolean-
error单独控制错误,任意非空值都会显示错误态any-
empty单独控制空态;不传时按 state.data 是否为「空数组 / 空字符串」判断boolean-
emptyText空态文案string暂无数据
skeleton骨架屏行数,false 关闭boolean | number4
delay延迟多少毫秒才显示加载态,避免闪烁number0
retry重试回调,不传时调用 state.execute()() => any-
retryText重试按钮文案string刷新

AsyncSlots ​

#default 收到的是完整的 AsyncSlotProps,可以按需取用:

插槽描述属性
default有数据时的内容{ data, loading, error, isEmpty, retry }
loading自定义加载态{ retry }
empty自定义空态{ retry }
error自定义错误态{ error, retry }

data 的类型取决于 state.data;需要精确类型时可显式标注:

ts
import type { AsyncSlotProps } from 'cosey';

type UserSlot = AsyncSlotProps<User[]>;

CoAsyncEmits ​

事件描述类型
retry点击重试(或调用 retry)() => void

基于 MIT 许可发布