--- 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 ```