Skip to content

watchDebounced ​

Category
Export Size
589 B
Last Changed
8 months ago
Alias
debouncedWatch

Debounced watch. The callback will only be invoked after the source stops changing for the specified duration.

Demo ​

Delay is set to 1000ms and maxWait is set to 5000ms for this demo.

Input:

Times Updated: 0

Usage ​

Similar to watch, but offering extra options debounce and maxWait which will be applied to the callback function.

ts
import { 
watchDebounced
} from '@vueuse/core'
watchDebounced
(
source, () => {
console
.
log
('changed!') },
{
debounce
: 500,
maxWait
: 1000 },
)

Options ​

OptionTypeDefaultDescription
debounceMaybeRefOrGetter<number>0Debounce delay in ms (can be reactive)
maxWaitMaybeRefOrGetter<number>—Maximum wait time before forced invocation

All standard watch options (deep, immediate, flush, etc.) are also supported.

Reactive Debounce Time ​

The debounce time can be reactive:

ts
import { 
watchDebounced
} from '@vueuse/core'
const
debounceMs
=
ref
(500)
watchDebounced
(
source, () => {
console
.
log
('changed!') },
{
debounce
:
debounceMs
},
) // Later, change the debounce time
debounceMs
.
value
= 1000

How It Works ​

It's essentially a shorthand for the following code:

ts
import { 
debounceFilter
,
watchWithFilter
} from '@vueuse/core'
watchWithFilter
(
source, () => {
console
.
log
('changed!') },
{
eventFilter
:
debounceFilter
(500, {
maxWait
: 1000 }),
}, )

Type Declarations ​

Show Type Declarations
ts
export interface 
WatchDebouncedOptions
<
Immediate
>
extends WatchOptions<
Immediate
>, DebounceFilterOptions {
debounce
?:
MaybeRefOrGetter
<number>
} export declare function
watchDebounced
<
T
,
Immediate
extends
Readonly
<boolean> = false,
>(
source
:
WatchSource
<
T
>,
cb
:
WatchCallback
<
T
,
Immediate
extends true ?
T
| undefined :
T
>,
options
?:
WatchDebouncedOptions
<
Immediate
>,
):
WatchHandle
export declare function
watchDebounced
<
T
extends
Readonly
<
MultiWatchSources
>,
Immediate
extends
Readonly
<boolean> = false,
>(
sources
: [...
T
],
cb
:
WatchCallback
<
MapSources
<
T
>,
MapOldSources
<
T
,
Immediate
>>,
options
?:
WatchDebouncedOptions
<
Immediate
>,
):
WatchHandle
export declare function
watchDebounced
<
T
extends object,
Immediate
extends
Readonly
<boolean> = false,
>(
source
:
T
,
cb
:
WatchCallback
<
T
,
Immediate
extends true ?
T
| undefined :
T
>,
options
?:
WatchDebouncedOptions
<
Immediate
>,
):
WatchHandle
/** @deprecated use `watchDebounced` instead */ export declare const
debouncedWatch
: typeof
watchDebounced

Source ​

Source • Demo • Docs

Contributors ​

Anthony Fu
Anthony Fu
Vida Xie
sun0day
webfansplz
山吹色御守
Kricsleo
Arthur Darkstone
IlyaL
James Garbutt
OrbisK
vaakian X
lvjiaxuan

Changelog ​

f1d32 - fix(shared): align overloads order of watch functions with original version (#5288)
b8102 - feat(watch): update watch return typo in watchExtractedObservable, watchDebounced, watchDeep, watchImmediate, watchOnce, watchThrottled and watchWithFilter (#4896)
e5f74 - feat!: deprecate alias exports in favor of original function names (#5009)
7432f - feat(types): deprecate MaybeRef and MaybeRefOrGetter in favor of Vue's native (#4636)
0a9ed - feat!: drop Vue 2 support, optimize bundles and clean up (#4349)

Released under the MIT License.