Skip to content

Commit f4f0966

Browse files
committed
fix(ssr): make computed inactive during ssr, fix memory leak
fix #5208
1 parent 4d07ed8 commit f4f0966

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

packages/reactivity/src/computed.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,16 @@ class ComputedRefImpl<T> {
3636
constructor(
3737
getter: ComputedGetter<T>,
3838
private readonly _setter: ComputedSetter<T>,
39-
isReadonly: boolean
39+
isReadonly: boolean,
40+
isSSR: boolean
4041
) {
4142
this.effect = new ReactiveEffect(getter, () => {
4243
if (!this._dirty) {
4344
this._dirty = true
4445
triggerRefValue(this)
4546
}
4647
})
48+
this.effect.active = !isSSR
4749
this[ReactiveFlags.IS_READONLY] = isReadonly
4850
}
4951

@@ -73,7 +75,8 @@ export function computed<T>(
7375
): WritableComputedRef<T>
7476
export function computed<T>(
7577
getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>,
76-
debugOptions?: DebuggerOptions
78+
debugOptions?: DebuggerOptions,
79+
isSSR = false
7780
) {
7881
let getter: ComputedGetter<T>
7982
let setter: ComputedSetter<T>
@@ -91,9 +94,9 @@ export function computed<T>(
9194
setter = getterOrOptions.set
9295
}
9396

94-
const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter)
97+
const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR)
9598

96-
if (__DEV__ && debugOptions) {
99+
if (__DEV__ && debugOptions && !isSSR) {
97100
cRef.effect.onTrack = debugOptions.onTrack
98101
cRef.effect.onTrigger = debugOptions.onTrigger
99102
}
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { computed as _computed } from '@vue/reactivity'
2+
import { isInSSRComponentSetup } from './component'
3+
4+
export const computed = ((getterOrOptions: any, debugOptions?: any) => {
5+
// @ts-ignore
6+
return _computed(getterOrOptions, debugOptions, isInSSRComponentSetup)
7+
}) as typeof _computed

packages/runtime-core/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
export const version = __VERSION__
44
export {
55
// core
6-
computed,
76
reactive,
87
ref,
98
readonly,
@@ -34,6 +33,7 @@ export {
3433
getCurrentScope,
3534
onScopeDispose
3635
} from '@vue/reactivity'
36+
export { computed } from './apiComputed'
3737
export {
3838
watch,
3939
watchEffect,

0 commit comments

Comments
 (0)