Skip to content

watchIgnorable

Category
Export Size
445 B
Last Changed
yesterday
Alias
ignorableWatch

Ignorable watch

Demo

Value: 0

Log

Usage

Extended watch that returns extra ignoreUpdates(updater) and ignorePrevAsyncUpdates() to ignore particular updates to the source.

ts
import { 
watchIgnorable
} from '@vueuse/core'
import {
nextTick
,
shallowRef
} from 'vue'
const
source
=
shallowRef
('foo')
const {
stop
,
ignoreUpdates
} =
watchIgnorable
(
source
,
v
=>
console
.
log
(`Changed to ${
v
}!`),
)
source
.
value
= 'bar'
await
nextTick
() // logs: Changed to bar!
ignoreUpdates
(() => {
source
.
value
= 'foobar'
}) await
nextTick
() // (nothing happened)
source
.
value
= 'hello'
await
nextTick
() // logs: Changed to hello!
ignoreUpdates
(() => {
source
.
value
= 'ignored'
})
source
.
value
= 'logged'
await
nextTick
() // logs: Changed to logged!

WatchOptionFlush timing

watchIgnorable accepts the same options as watch and uses the same defaults. So, by default the composable works using flush: 'pre'.

ignorePrevAsyncUpdates

This feature is only for async flush 'pre' and 'post'. If flush: 'sync' is used, ignorePrevAsyncUpdates() is a no-op as the watch will trigger immediately after each update to the source. It is still provided for sync flush so the code can be more generic.

ts
import { 
watchIgnorable
} from '@vueuse/core'
import {
nextTick
,
shallowRef
} from 'vue'
const
source
=
shallowRef
('foo')
const {
ignorePrevAsyncUpdates
} =
watchIgnorable
(
source
,
v
=>
console
.
log
(`Changed to ${
v
}!`),
)
source
.
value
= 'bar'
await
nextTick
() // logs: Changed to bar!
source
.
value
= 'good'
source
.
value
= 'by'
ignorePrevAsyncUpdates
()
await
nextTick
() // (nothing happened)
source
.
value
= 'prev'
ignorePrevAsyncUpdates
()
source
.
value
= 'after'
await
nextTick
() // logs: Changed to after!

Type Declarations

Show Type Declarations
ts
export type 
IgnoredUpdater
= (
updater
: () => void) => void
export type
IgnoredPrevAsyncUpdates
= () => void
export interface WatchIgnorableReturn {
ignoreUpdates
:
IgnoredUpdater
ignorePrevAsyncUpdates
:
IgnoredPrevAsyncUpdates
stop
:
WatchStopHandle
} export declare function
watchIgnorable
<
T
,
Immediate
extends
Readonly
<boolean> = false,
>(
source
:
WatchSource
<
T
>,
cb
:
WatchCallback
<
T
,
Immediate
extends true ?
T
| undefined :
T
>,
options
?:
WatchWithFilterOptions
<
Immediate
>,
): WatchIgnorableReturn export declare function
watchIgnorable
<
T
extends
Readonly
<
MultiWatchSources
>,
Immediate
extends
Readonly
<boolean> = false,
>(
sources
: [...
T
],
cb
:
WatchCallback
<
MapSources
<
T
>,
MapOldSources
<
T
,
Immediate
>>,
options
?:
WatchWithFilterOptions
<
Immediate
>,
): WatchIgnorableReturn export declare function
watchIgnorable
<
T
extends object,
Immediate
extends
Readonly
<boolean> = false,
>(
source
:
T
,
cb
:
WatchCallback
<
T
,
Immediate
extends true ?
T
| undefined :
T
>,
options
?:
WatchWithFilterOptions
<
Immediate
>,
): WatchIgnorableReturn /** @deprecated use `watchIgnorable` instead */ export declare const
ignorableWatch
: typeof
watchIgnorable

Source

SourceDemoDocs

Contributors

Anthony Fu
Arthur Darkstone
Anthony Fu
Bao Nguyen
IlyaL
山吹色御守
Kricsleo
Vida Xie
Yu Lia
IlyaL
Yue JIN
sun0day
lvjiaxuan
webfansplz

Changelog

Pending for release...
c738f - fix: do not attach debug hooks to the internal counting watch (#5606)
f1d32 - fix(shared): align overloads order of watch functions with original version (#5288)
e5f74 - feat!: deprecate alias exports in favor of original function names (#5009)
0e10e - fix: add and export types (#4809)
0a9ed - feat!: drop Vue 2 support, optimize bundles and clean up (#4349)

Released under the MIT License.