公共 API
VueRequest 通常由 Return Values、Service 和 Options 三个部分组成
const { ...ReturnValues } = useRequest<R, P>(Service, Options);
Return Values
data
类型:
shallowRef<R | undefined>默认值:
undefined接口返回的数据。
loading
类型:
Ref<boolean>默认值:
falseService 请求的执行状态
params
类型:
Ref<P[]>默认值:
[]Service 的请求参数
示例:
function getUser(name, age) { return axios.get('api/user', { params: { name: name, age: age, }, }); } const { params, run } = useRequest(getUser, { defaultParams: ['John', 18], }); // 默认请求时,如果存在 defaultParams, 则 params.value 将会等于 defaultParams,否则为空数组 // 当 run 传入参数时,此时的参数将会同步到 params 里面 run('Benny', 18); // params.value 等于 ['Benny', 18]
error
类型:
shallowRef<Error | undefined>默认值:
undefined如果在内部抛出了一个错误,则会被
error接收并返回
run
类型:
(...params: P[]) => void手动触发 Service 的请求。会自动捕获异常,通过
options.onError处理
runAsync
类型:
(...params: P[]) => Promise<R>与
run用法一致。但返回的是Promise,需要自行处理异常。
cancel
类型:
() => void- 手动取消本次请求
- 停止轮询功能
refresh
refreshAsync
mutate
Service
类型:
(...params: P[]) => Promise<R>详情:
用于发起获取资源的请求 ,可参考 数据请求。
Service必须是一个返回Promise的函数。你可以借助第三方的请求库(如axios)来帮你生成一个用于发起获取资源的请求Promise函数。import { useRequest } from 'vue-request'; import axios from 'axios'; const getUser = () => { return axios.get('api/user'); }; const { data } = useRequest(getUser);
Options
loadingDelay 响应式
类型:
number | Ref<number>默认值:
0详情:
通过设置延迟的毫秒数,可以延迟 loading 变成
true的时间,有效防止闪烁。参考: Loading 状态
loadingKeep 响应式
类型:
number | Ref<number>默认值:
0详情:
可以让 loading 动画保持一定的时间。
参考: Loading 状态
pollingInterval 响应式
类型:
number | Ref<number>默认值:
undefined详情:
通过设置轮询间隔毫秒值,可以进入轮询模式,定时触发请求。可以通过
run/cancel来 开启/停止 轮询。在manual设置为true时,需要手动执行一次run后,才开始轮询。- 间隔值必须大于
0才会生效
- 间隔值必须大于
参考: 轮询
pollingWhenHidden
类型:
boolean默认值:
false详情:
当
pollingInterval大于0时才生效。默认情况下,轮询在屏幕不可见时,会暂停轮询。当设置成true时,在屏幕不可见时,轮询任务依旧会定时执行。参考: 屏幕不可见时轮询
pollingWhenOffline
类型:
boolean默认值:
false详情:
当
pollingInterval大于0时才生效。默认情况下,轮询在网络不可用时,会暂停轮询。当设置成true时,在网络不可用时,轮询任务依旧会定时执行。参考: 网络离线时轮询
debounceInterval 响应式
类型:
number | Ref<number>默认值:
undefined详情:
通过设置需要延迟的毫秒数,进入防抖模式。此时如果频繁触发请求,则会以防抖策略进行请求。
参考: 防抖
debounceOptions 响应式
类型:
DebounceOptions | Reactive<DebounceOptions>type DebounceOptions = { leading: boolean; maxWait: number; trailing: boolean; };默认值:
{ leading: false, maxWait: undefined, trailing: true }详情:
leading(boolean): 指定在延迟开始前调用。maxWait(number): 设置请求方法允许被延迟的最大值。trailing(boolean): 指定在延迟结束后调用。
throttleInterval 响应式
类型:
number | Ref<number>默认值:
undefined详情:
通过设置需要节流的毫秒数,进入节流模式。此时如果频繁触发请求,则会以节流策略进行请求。
参考: 节流
throttleOptions 响应式
类型:
ThrottleOptions | Reactive<ThrottleOptions>type ThrottleOptions = { leading: boolean; trailing: boolean; };默认值:
{ leading: true, trailing: true, }详情:
leading(boolean): 指定调用在节流开始前。trailing(boolean): 指定调用在节流结束后。
refreshOnWindowFocus 响应式
类型:
boolean | Ref<boolean>默认值:
false详情:
当设置为
true时,则在浏览器窗口触发 focus在新窗口打开 和 visibilitychange在新窗口打开 时,会重新发起请求。参考: 聚焦时重新请求
refocusTimespan 响应式
类型:
number | Ref<number>默认值:
5 * 1000详情:
当 refreshOnWindowFocus 设置为
true时,你可以通过设置间隔的毫秒数,来限制refresh的执行间隔,默认为 5000ms参考: 重新聚焦间隔时间
cacheKey
类型:
string | (params?: P) => string默认值:
undefined详情:
参考: 缓存
cacheTime
类型:
number默认值:
10* 60 * 1000详情:
当开启缓存后,你可以通过设置
cacheTime来告诉我们缓存的过期时间。当缓存过期后,我们会将其删除。默认为 600000 毫秒,即 10 分钟参考: 缓存时间
staleTime
类型:
number默认值:
0详情:
如果你能确保缓存下来的数据,在一定时间内不会有任何更新的,我们建议你设置一个合理的毫秒数
- 默认为
0,意味着不保鲜,每次都会重新发起请求 - 设置为
-1则意味着缓存永不过期
- 默认为
参考: 保鲜时间
setCache
类型:
(cacheKey: string, cacheData: CacheData) => voidtype CacheData = { data: R; params: P; time: number; };详情:
自定义设置缓存
参考: 自定义缓存
getCache
类型:
(cacheKey: string) => CacheDatatype CacheData = { data: R; params: P; time: number; };详情:
自定义读取缓存
参考: 自定义缓存
errorRetryCount 响应式
类型:
number | Ref<number>默认值:
0详情:
最大错误重试次数
参考: 错误重试次数
errorRetryInterval 响应式
类型:
number | Ref<number>默认值:
0详情:
默认情况下,VueRequest 使用二进制指数退避算法在新窗口打开 来帮你计算出合适的间隔时间,你也可以通过设置
errorRetryInterval来覆盖默认行为参考: 错误重试间隔时间
manual
defaultParams
类型:
P[]默认值:
[]详情:
如果
manual设置为false,在自动执行请求的时候,将会把defaultParams作为请求参数
ready 响应式
类型:
Ref<boolean> | () => boolean默认值:
true详情:
只有当
ready为true时,才会发起请求。- 自动模式:当
manual=false时,每次ready从false变为true时,都会自动发起请求,并且会带上参数options.defaultParams。 - 手动模式:当
manual=true时,只要ready为false,则无法发起请求。
- 自动模式:当
参考: 依赖请求
initialData
类型:
R默认值:
undefined详情:
默认的
data
refreshDeps
类型:
WatchSource<any> | WatchSource<any>[]默认值:
[]详情:
当
refreshDeps里面的内容发生变化时,如果没有设置refreshDepsAction, 就会触发refresh的重新执行。其本质只是对watch在新窗口打开 的封装。watch(refreshDeps, refresh);
refreshDepsAction
类型:
() => void详情:
当
refreshDeps里面的内容发生变化时,会被调用。manual=true时也会被触发。
