--- category: Reactivity alias: controlledComputed --- # computedWithControl Explicitly define the dependencies of computed. ## Usage ```ts twoslash include main import { computedWithControl } from '@vueuse/core'; const source = ref('foo'); const counter = ref(0); const computedRef = computedWithControl( () => source.value, // watch source, same as `watch` () => counter.value, // computed getter, same as `computed` ); ``` With this, the changes of `counter` won't trigger `computedRef` to update but the `source` ref does. ```ts // @include: main // ---cut--- console.log(computedRef.value); // 0 counter.value += 1; console.log(computedRef.value); // 0 source.value = 'bar'; console.log(computedRef.value); // 1 ``` ### Manual Triggering You can also manually trigger the update of the computed by: ```ts // @include: main // ---cut--- const computedRef = computedWithControl( () => source.value, () => counter.value, ); computedRef.trigger(); ``` ### Deep Watch Unlike `computed`, `computedWithControl` is shallow by default. You can specify the same options as `watch` to control the behavior: ```ts const source = ref({ name: 'foo' }); const computedRef = computedWithControl(source, () => counter.value, { deep: true }); ``` ## Type Declarations ```ts export interface ComputedWithControlRefExtra { /** * Force update the computed value. */ trigger: () => void; } export interface ComputedRefWithControl extends ComputedRef, ComputedWithControlRefExtra {} export interface WritableComputedRefWithControl extends WritableComputedRef, ComputedWithControlRefExtra {} export type ComputedWithControlRef = | ComputedRefWithControl | WritableComputedRefWithControl; export declare function computedWithControl( source: WatchSource | MultiWatchSources, fn: ComputedGetter, options?: WatchOptions, ): ComputedRefWithControl; export declare function computedWithControl( source: WatchSource | MultiWatchSources, fn: WritableComputedOptions, options?: WatchOptions, ): WritableComputedRefWithControl; /** @deprecated use `computedWithControl` instead */ export declare const controlledComputed: typeof computedWithControl; ```