--- category: Watch alias: ignorableWatch --- # watchIgnorable Ignorable watch ## 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! ``` ## Recommended Readings - [Ignorable Watch](https://patak.dev/vue/ignorable-watch.html) - by [@patak-dev](https://github.com/patak-dev) ## 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 extends Readonly, Immediate extends Readonly = false, >( sources: [...T], cb: WatchCallback, MapOldSources>, options?: WatchWithFilterOptions, ): WatchIgnorableReturn export declare function watchIgnorable< T, Immediate extends Readonly = false, >( source: WatchSource, cb: WatchCallback, options?: WatchWithFilterOptions, ): WatchIgnorableReturn export declare function watchIgnorable< T extends object, Immediate extends Readonly = false, >( source: T, cb: WatchCallback, options?: WatchWithFilterOptions, ): WatchIgnorableReturn /** @deprecated use `watchIgnorable` instead */ export declare const ignorableWatch: typeof watchIgnorable ```