--- category: Component --- # computedInject Combine computed and inject ## Usage In Provider Component ```ts twoslash include main import type { InjectionKey, Ref } from 'vue'; import { provide } from 'vue'; interface Item { key: number; value: string; } export const ArrayKey: InjectionKey> = Symbol('symbol-key'); const array = ref([ { key: 1, value: '1' }, { key: 2, value: '2' }, { key: 3, value: '3' }, ]); provide(ArrayKey, array); ``` In Receiver Component ```ts // @filename: provider.ts // @include: main // ---cut--- import { computedInject } from '@vueuse/core'; import { ArrayKey } from './provider'; const computedArray = computedInject(ArrayKey, (source) => { const arr = [...source.value]; arr.unshift({ key: 0, value: 'all' }); return arr; }); ``` ## Type Declarations ```ts export type ComputedInjectGetter = (source: T | undefined, oldValue?: K) => K; export type ComputedInjectGetterWithDefault = (source: T, oldValue?: K) => K; export type ComputedInjectSetter = (v: T) => void; export interface WritableComputedInjectOptions { get: ComputedInjectGetter; set: ComputedInjectSetter; } export interface WritableComputedInjectOptionsWithDefault { get: ComputedInjectGetterWithDefault; set: ComputedInjectSetter; } export declare function computedInject( key: InjectionKey | string, getter: ComputedInjectGetter, ): ComputedRef; export declare function computedInject( key: InjectionKey | string, options: WritableComputedInjectOptions, ): ComputedRef; export declare function computedInject( key: InjectionKey | string, getter: ComputedInjectGetterWithDefault, defaultSource: T, treatDefaultAsFactory?: false, ): ComputedRef; export declare function computedInject( key: InjectionKey | string, options: WritableComputedInjectOptionsWithDefault, defaultSource: T | (() => T), treatDefaultAsFactory: true, ): ComputedRef; ```