--- category: Watch --- # watchTriggerable Watch that can be triggered manually ## Usage A `watch` wrapper that supports manual triggering of `WatchCallback`, which returns an additional `trigger` to execute a `WatchCallback` immediately. ```ts import { watchTriggerable } from '@vueuse/core'; import { nextTick, shallowRef } from 'vue'; const source = shallowRef(0); const { trigger, ignoreUpdates } = watchTriggerable(source, (v) => console.log(`Changed to ${v}!`)); source.value = 'bar'; await nextTick(); // logs: Changed to bar! // Execution of WatchCallback via `trigger` does not require waiting trigger(); // logs: Changed to bar! ``` ### `onCleanup` When you want to manually call a `watch` that uses the onCleanup parameter; simply taking the `WatchCallback` out and calling it doesn't make it easy to implement the `onCleanup` parameter. Using `watchTriggerable` will solve this problem. ```ts import { watchTriggerable } from '@vueuse/core'; import { shallowRef } from 'vue'; const source = shallowRef(0); const { trigger } = watchTriggerable(source, async (v, _, onCleanup) => { let canceled = false; onCleanup(() => (canceled = true)); await new Promise((resolve) => setTimeout(resolve, 500)); if (canceled) return; console.log(`The value is "${v}"\n`); }); source.value = 1; // no log await trigger(); // logs (after 500 ms): The value is "1" ``` ## Type Declarations ```ts export interface WatchTriggerableReturn extends WatchIgnorableReturn { /** Execute `WatchCallback` immediately */ trigger: () => FnReturnT; } type OnCleanup = (cleanupFn: () => void) => void; export type WatchTriggerableCallback = ( value: V, oldValue: OV, onCleanup: OnCleanup, ) => R; export declare function watchTriggerable, FnReturnT>( sources: [...T], cb: WatchTriggerableCallback, MapOldSources, FnReturnT>, options?: WatchWithFilterOptions, ): WatchTriggerableReturn; export declare function watchTriggerable( source: WatchSource, cb: WatchTriggerableCallback, options?: WatchWithFilterOptions, ): WatchTriggerableReturn; export declare function watchTriggerable( source: T, cb: WatchTriggerableCallback, options?: WatchWithFilterOptions, ): WatchTriggerableReturn; ```