Skip to content

Commit b31dd74

Browse files
committed
dx(reactivity): disable recursive computed warning by default
Now can be enabled with app.config.warnRecursiveComputed option. close #10341
1 parent 21e0d6b commit b31dd74

File tree

4 files changed

+25
-4
lines changed

4 files changed

+25
-4
lines changed

packages/reactivity/src/computed.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ export class ComputedRefImpl<T> {
4242

4343
public _cacheable: boolean
4444

45+
/**
46+
* Dev only
47+
*/
48+
_warnRecursive?: boolean
49+
4550
constructor(
4651
private getter: ComputedGetter<T>,
4752
private readonly _setter: ComputedSetter<T>,
@@ -74,7 +79,9 @@ export class ComputedRefImpl<T> {
7479
}
7580
trackRefValue(self)
7681
if (self.effect._dirtyLevel >= DirtyLevels.MaybeDirty_ComputedSideEffect) {
77-
__DEV__ && warn(COMPUTED_SIDE_EFFECT_WARN, `\n\ngetter: `, this.getter)
82+
if (__DEV__ && (__TEST__ || this._warnRecursive)) {
83+
warn(COMPUTED_SIDE_EFFECT_WARN, `\n\ngetter: `, this.getter)
84+
}
7885
triggerRefValue(self, DirtyLevels.MaybeDirty_ComputedSideEffect)
7986
}
8087
return self._value

packages/reactivity/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export {
4343
type WritableComputedOptions,
4444
type ComputedGetter,
4545
type ComputedSetter,
46+
type ComputedRefImpl,
4647
} from './computed'
4748
export { deferredComputed } from './deferredComputed'
4849
export {
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
import { computed as _computed } from '@vue/reactivity'
2-
import { isInSSRComponentSetup } from './component'
1+
import { type ComputedRefImpl, computed as _computed } from '@vue/reactivity'
2+
import { getCurrentInstance, isInSSRComponentSetup } from './component'
33

44
export const computed: typeof _computed = (
55
getterOrOptions: any,
66
debugOptions?: any,
77
) => {
88
// @ts-expect-error
9-
return _computed(getterOrOptions, debugOptions, isInSSRComponentSetup)
9+
const c = _computed(getterOrOptions, debugOptions, isInSSRComponentSetup)
10+
if (__DEV__) {
11+
const i = getCurrentInstance()
12+
if (i && i.appContext.config.warnRecursiveComputed) {
13+
;(c as unknown as ComputedRefImpl<any>)._warnRecursive = true
14+
}
15+
}
16+
return c
1017
}

packages/runtime-core/src/apiCreateApp.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ export interface AppConfig {
110110
* @deprecated use config.compilerOptions.isCustomElement
111111
*/
112112
isCustomElement?: (tag: string) => boolean
113+
114+
/**
115+
* TODO document for 3.5
116+
* Enable warnings for computed getters that recursively trigger itself.
117+
*/
118+
warnRecursiveComputed?: boolean
113119
}
114120

115121
export interface AppContext {

0 commit comments

Comments
 (0)