export { ref, isRef, toRefs, reactive, isReactive, readonly, isReadonly, toRaw, markReadonly, markNonReactive, effect, // types ReactiveEffect, ReactiveEffectOptions, DebuggerEvent, OperationTypes, Ref, ComputedRef, UnwrapRef, WritableComputedOptions } from '@vue/reactivity' import { computed as _computed, ComputedRef, WritableComputedOptions, ReactiveEffect, WritableComputedRef } from '@vue/reactivity' import { currentInstance } from './component' // record effects created during a component's setup() so that they can be // stopped when the component unmounts export function recordEffect(effect: ReactiveEffect) { if (currentInstance) { ;(currentInstance.effects || (currentInstance.effects = [])).push(effect) } } export function computed(getter: () => T): ComputedRef export function computed( options: WritableComputedOptions ): WritableComputedRef export function computed( getterOrOptions: (() => T) | WritableComputedOptions ) { const c = _computed(getterOrOptions as any) recordEffect(c.effect) return c }