diff --git a/packages/runtime-core/__tests__/apiComputed.spec.ts b/packages/runtime-core/__tests__/apiComputed.spec.ts deleted file mode 100644 index 46466922571..00000000000 --- a/packages/runtime-core/__tests__/apiComputed.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - computed, - getCurrentInstance, - h, - nodeOps, - render, -} from '@vue/runtime-test' - -describe('api: computed', () => { - test('should warn if getCurrentInstance is called inside computed getter', () => { - const Comp = { - setup() { - const c = computed(() => { - getCurrentInstance() - return 1 - }) - return () => c.value - }, - } - render(h(Comp), nodeOps.createElement('div')) - expect( - 'getCurrentInstance() called inside a computed getter', - ).toHaveBeenWarned() - }) - - test('should warn if getCurrentInstance is called inside computed getter (object syntax)', () => { - const Comp = { - setup() { - const c = computed({ - get: () => { - getCurrentInstance() - return 1 - }, - set: () => {}, - }) - return () => c.value - }, - } - render(h(Comp), nodeOps.createElement('div')) - expect( - 'getCurrentInstance() called inside a computed getter', - ).toHaveBeenWarned() - }) -}) diff --git a/packages/runtime-core/src/apiComputed.ts b/packages/runtime-core/src/apiComputed.ts index d634196764f..97db0da453c 100644 --- a/packages/runtime-core/src/apiComputed.ts +++ b/packages/runtime-core/src/apiComputed.ts @@ -1,42 +1,10 @@ -import { - type ComputedGetter, - type WritableComputedOptions, - computed as _computed, -} from '@vue/reactivity' +import { computed as _computed } from '@vue/reactivity' import { isInSSRComponentSetup } from './component' -import { isFunction } from '@vue/shared' - -/** - * For dev warning only. - * Context: https://github.com/vuejs/core/discussions/9974 - */ -export let isInComputedGetter = false - -function wrapComputedGetter( - getter: ComputedGetter, -): ComputedGetter { - return () => { - isInComputedGetter = true - try { - return getter() - } finally { - isInComputedGetter = false - } - } -} export const computed: typeof _computed = ( - getterOrOptions: ComputedGetter | WritableComputedOptions, + getterOrOptions: any, debugOptions?: any, ) => { - if (__DEV__) { - if (isFunction(getterOrOptions)) { - getterOrOptions = wrapComputedGetter(getterOrOptions) - } else { - getterOrOptions.get = wrapComputedGetter(getterOrOptions.get) - } - } - - // @ts-expect-error the 3rd argument is hidden from public types + // @ts-expect-error return _computed(getterOrOptions, debugOptions, isInSSRComponentSetup) } diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index a8edbb9e228..1508627e579 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -85,7 +85,6 @@ import { } from './compat/compatConfig' import type { SchedulerJob } from './scheduler' import type { LifecycleHooks } from './enums' -import { isInComputedGetter } from './apiComputed' export type Data = Record @@ -632,18 +631,8 @@ export function createComponentInstance( export let currentInstance: ComponentInternalInstance | null = null -export const getCurrentInstance: () => ComponentInternalInstance | null = - () => { - if (__DEV__ && isInComputedGetter) { - warn( - `getCurrentInstance() called inside a computed getter. ` + - `This is incorrect usage as computed getters are not guaranteed ` + - `to be executed with an active component instance. If you are using ` + - `a composable inside a computed getter, move it ouside to the setup scope.`, - ) - } - return currentInstance || currentRenderingInstance - } +export const getCurrentInstance: () => ComponentInternalInstance | null = () => + currentInstance || currentRenderingInstance let internalSetCurrentInstance: ( instance: ComponentInternalInstance | null,