Skip to content

watchDebounced

Category
Export Size
455 B
Last Changed
last week
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

SourceDemoDocs

Contributors

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

Changelog

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

Released under the MIT License.

FREE WEEKEND
Get unlimited access to ALL Vue School courses
Feb 28 - Mar 1 2026
Sign Up
Feb 28 - Mar 1 2026