Skip to content

watchThrottled

Category
Export Size
530 B
Last Changed
last month
Alias
throttledWatch

Throttled watch. The callback will be invoked at most once per specified duration.

Demo

Delay is set to 1000ms for this demo.

Input:

Times Updated: 0

Usage

Similar to watch, but offering extra options throttle, trailing, and leading which will be applied to the callback function.

ts
import { 
watchThrottled
} from '@vueuse/core'
watchThrottled
(
source, () => {
console
.
log
('changed!') },
{
throttle
: 500 },
)

Options

OptionTypeDefaultDescription
throttleMaybeRefOrGetter<number>0Throttle interval in ms (can be reactive)
trailingbooleantrueInvoke on the trailing edge
leadingbooleantrueInvoke on the leading edge

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

Leading and Trailing

Control when the callback is invoked:

ts
import { 
watchThrottled
} from '@vueuse/core'
// Only invoke at the start of each throttle period
watchThrottled
(source, callback, {
throttle
: 500,
leading
: true,
trailing
: false,
}) // Only invoke at the end of each throttle period
watchThrottled
(source, callback, {
throttle
: 500,
leading
: false,
trailing
: true,
})

How It Works

It's essentially a shorthand for the following code:

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

Type Declarations

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

Source

SourceDemoDocs

Contributors

Anthony Fu
Anthony Fu
Vida Xie
sun0day
山吹色御守
Kricsleo
Arthur Darkstone
IlyaL
OrbisK
丶远方
lvjiaxuan
Joe Zimmerman
webfansplz

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.

40% Off  yearly access to Vue School, Full course library + Vue.js Master Class.
Claim Offer