useAsyncState
响应式异步状态。不会阻塞你的设置函数,并且在 promise 准备就绪后会触发更改。状态默认为 shallowRef
。
Demo
Ready: false
Loading: true
{}
用法
ts
import { useAsyncState } from '@vueuse/core'
import axios from 'axios'
const { state, isReady, isLoading } = useAsyncState(
axios
.get('https://jsonplaceholder.typicode.com/todos/1')
.then(t => t.data),
{ id: null },
)
类型声明
显示类型声明
typescript
export interface UseAsyncStateReturnBase<
Data,
Params extends any[],
Shallow extends boolean,
> {
state: Shallow extends true ? Ref<Data> : Ref<UnwrapRef<Data>>
isReady: Ref<boolean>
isLoading: Ref<boolean>
error: Ref<unknown>
execute: (delay?: number, ...args: Params) => Promise<Data>
}
export type UseAsyncStateReturn<
Data,
Params extends any[],
Shallow extends boolean,
> = UseAsyncStateReturnBase<Data, Params, Shallow> &
PromiseLike<UseAsyncStateReturnBase<Data, Params, Shallow>>
export interface UseAsyncStateOptions<Shallow extends boolean, D = any> {
/**
* 执行 Promise 的延迟时间。单位为毫秒。
*
* @default 0
*/
delay?: number
/**
* 在函数调用后立即执行 Promise。
* 如果设置了延迟,将应用延迟。
*
* 当设置为 false 时,需要手动执行。
*
* @default true
*/
immediate?: boolean
/**
* 捕获到错误时的回调。
*/
onError?: (e: unknown) => void
/**
* 捕获到成功时的回调。
* @param {D} data
*/
onSuccess?: (data: D) => void
/**
* 在执行 Promise 前将状态设置为初始状态。
*
* 当多次调用执行函数时(例如,刷新数据),这可能很有用。当设置为 false 时,当前状态保持不变,直到 Promise 解析。
*
* @default true
*/
resetOnExecute?: boolean
/**
* 使用 shallowRef。
*
* @default true
*/
shallow?: Shallow
/**
*
* 在执行 execute 函数时抛出错误
*
* @default false
*/
throwError?: boolean
}
/**
* 响应式的异步状态。不会阻塞您的函数,并在 Promise 完成时触发更改。
*
* @see https://vueuse.org/useAsyncState
* @param promise 要解析的异步函数
* @param initialState 初始状态,在第一次评估完成之前使用
* @param options
*/
export declare function useAsyncState<
Data,
Params extends any[] = [],
Shallow extends boolean = true,
>(
promise: Promise<Data> | ((...args: Params) => Promise<Data>),
initialState: Data,
options?: UseAsyncStateOptions<Shallow, Data>,
): UseAsyncStateReturn<Data, Params, Shallow>
Source
贡献者
Anthony Fu
丶远方
Flamenco
machete
Anthony Fu
Jules Raffoux
hfutsora
Brain777777
Mao Mr
Jelf
Sergey Shumov
lsdsjy
IIFelix
Alex Francev
webfansplz
Shinigami
Shahar Kosti
Alex Kozack
ordago
Jacob Clevenger
Antério Vieira