跳到主要内容

useDebounceFn

分类
导出大小
388 B
上次更改
3 个月前
相关

防抖函数执行。

防抖是一个忙碌的服务员:如果你一直提出请求,你的请求将被忽略,直到你停下来,给他们一些时间思考你最新的请求。

演示

此演示的延迟设置为 1000 毫秒,最大等待时间设置为 5000 毫秒。

按钮点击次数:0

事件处理程序调用次数:0

用法

ts
import { 
useDebounceFn
,
useEventListener
} from '@vueuse/core'
const
debouncedFn
=
useDebounceFn
(() => {
// do something }, 1000)
useEventListener
(
window
, 'resize',
debouncedFn
)

你也可以传入第三个参数,设置最大等待时间,类似于 lodash debounce

ts
import { 
useDebounceFn
,
useEventListener
} from '@vueuse/core'
// If no invokation after 5000ms due to repeated input, // the function will be called anyway. const
debouncedFn
=
useDebounceFn
(() => {
// do something }, 1000, {
maxWait
: 5000 })
useEventListener
(
window
, 'resize',
debouncedFn
)

此外,你可以使用 Promise 操作获取函数的返回值。

ts
import { 
useDebounceFn
} from '@vueuse/core'
const
debouncedRequest
=
useDebounceFn
(() => 'response', 1000)
debouncedRequest
().
then
((
value
) => {
console
.
log
(
value
) // 'response'
}) // or use async/await async function
doRequest
() {
const
value
= await
debouncedRequest
()
console
.
log
(
value
) // 'response'
}

由于当开发者不需要返回值时,未处理的拒绝错误相当烦人,因此**默认情况下**,如果函数被取消,Promise 将**不会**被拒绝。你需要指定选项 `rejectOnCancel: true` 来捕获拒绝。

ts
import { 
useDebounceFn
} from '@vueuse/core'
const
debouncedRequest
=
useDebounceFn
(() => 'response', 1000, {
rejectOnCancel
: true })
debouncedRequest
()
.
then
((
value
) => {
// do something }) .
catch
(() => {
// do something when canceled }) // calling it again will cancel the previous request and gets rejected
setTimeout
(
debouncedRequest
, 500)

类型声明

ts
export type 
UseDebounceFnReturn
<
T
extends
FunctionArgs
> =
PromisifyFn
<
T
>
/** * Debounce execution of a function. * * @see https://vueuse.org.cn/useDebounceFn * @param fn A function to be executed after delay milliseconds debounced. * @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful. * @param options Options * * @return A new, debounce, function. * * @__NO_SIDE_EFFECTS__ */ export declare function
useDebounceFn
<
T
extends
FunctionArgs
>(
fn
:
T
,
ms
?:
MaybeRefOrGetter
<number>,
options
?:
DebounceFilterOptions
,
):
UseDebounceFnReturn
<
T
>

来源

源代码演示文档

贡献者

Anthony Fu
SerKo
Bruno Kalthoff
Robin
Thimo Sietsma
IlyaL
Fernando Fernández
Anthony Fu
vaakian X
azaleta
Joe Maylor
Jakub Freisler
wheat

更新日志

v13.6.0
d32f8 - refactor: 为所有纯函数添加 @__NO_SIDE_EFFECTS__ 注释 (#4907)
v13.1.0
c1d6e - feat(shared): 确保返回类型存在 (#4659)
v12.8.0
7432f - feat(types): 废弃 MaybeRefMaybeRefOrGetter,转而使用 Vue 的原生类型 (#4636)

根据 MIT 许可证发布。