mirror of https://github.com/vuejs/core.git
Revert "fix(reactivity): fix side effect computed dirty level (#11183)"
This reverts commit 3bd79e3e5e
.
This commit is contained in:
parent
261fb7ced1
commit
6c303eacd1
|
@ -708,63 +708,6 @@ describe('reactivity/computed', () => {
|
||||||
expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned()
|
expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should chained computeds keep reactivity when computed effect happens', async () => {
|
|
||||||
const v = ref('Hello')
|
|
||||||
const c = computed(() => {
|
|
||||||
v.value += ' World'
|
|
||||||
return v.value
|
|
||||||
})
|
|
||||||
const d = computed(() => c.value)
|
|
||||||
const e = computed(() => d.value)
|
|
||||||
const Comp = {
|
|
||||||
setup: () => {
|
|
||||||
return () => d.value + ' | ' + e.value
|
|
||||||
},
|
|
||||||
}
|
|
||||||
const root = nodeOps.createElement('div')
|
|
||||||
|
|
||||||
render(h(Comp), root)
|
|
||||||
await nextTick()
|
|
||||||
expect(serializeInner(root)).toBe('Hello World | Hello World')
|
|
||||||
|
|
||||||
v.value += ' World'
|
|
||||||
await nextTick()
|
|
||||||
expect(serializeInner(root)).toBe(
|
|
||||||
'Hello World World World | Hello World World World',
|
|
||||||
)
|
|
||||||
expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should keep dirty level when side effect computed value changed', () => {
|
|
||||||
const v = ref(0)
|
|
||||||
const c = computed(() => {
|
|
||||||
v.value += 1
|
|
||||||
return v.value
|
|
||||||
})
|
|
||||||
const d = computed(() => {
|
|
||||||
return { d: c.value }
|
|
||||||
})
|
|
||||||
|
|
||||||
const Comp = {
|
|
||||||
setup: () => {
|
|
||||||
return () => {
|
|
||||||
return [d.value.d, d.value.d]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
const root = nodeOps.createElement('div')
|
|
||||||
render(h(Comp), root)
|
|
||||||
|
|
||||||
expect(d.value.d).toBe(1)
|
|
||||||
expect(serializeInner(root)).toBe('11')
|
|
||||||
expect(c.effect._dirtyLevel).toBe(
|
|
||||||
DirtyLevels.MaybeDirty_ComputedSideEffect_Origin,
|
|
||||||
)
|
|
||||||
expect(d.effect._dirtyLevel).toBe(DirtyLevels.MaybeDirty_ComputedSideEffect)
|
|
||||||
expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('debug: onTrigger (ref)', () => {
|
it('debug: onTrigger (ref)', () => {
|
||||||
let events: DebuggerEvent[] = []
|
let events: DebuggerEvent[] = []
|
||||||
const onTrigger = vi.fn((e: DebuggerEvent) => {
|
const onTrigger = vi.fn((e: DebuggerEvent) => {
|
||||||
|
|
|
@ -71,16 +71,12 @@ export class ComputedRefImpl<T> {
|
||||||
get value() {
|
get value() {
|
||||||
// the computed ref may get wrapped by other proxies e.g. readonly() #3376
|
// the computed ref may get wrapped by other proxies e.g. readonly() #3376
|
||||||
const self = toRaw(this)
|
const self = toRaw(this)
|
||||||
const lastDirtyLevel = self.effect._dirtyLevel
|
|
||||||
if (
|
if (
|
||||||
(!self._cacheable || self.effect.dirty) &&
|
(!self._cacheable || self.effect.dirty) &&
|
||||||
hasChanged(self._value, (self._value = self.effect.run()!))
|
hasChanged(self._value, (self._value = self.effect.run()!))
|
||||||
) {
|
) {
|
||||||
// keep dirty level when side effect computed's value changed
|
|
||||||
if (lastDirtyLevel !== DirtyLevels.MaybeDirty_ComputedSideEffect) {
|
|
||||||
triggerRefValue(self, DirtyLevels.Dirty)
|
triggerRefValue(self, DirtyLevels.Dirty)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
trackRefValue(self)
|
trackRefValue(self)
|
||||||
if (
|
if (
|
||||||
self.effect._dirtyLevel >=
|
self.effect._dirtyLevel >=
|
||||||
|
|
|
@ -93,10 +93,8 @@ export class ReactiveEffect<T = any> {
|
||||||
if (
|
if (
|
||||||
dep.computed.effect._dirtyLevel ===
|
dep.computed.effect._dirtyLevel ===
|
||||||
DirtyLevels.MaybeDirty_ComputedSideEffect_Origin
|
DirtyLevels.MaybeDirty_ComputedSideEffect_Origin
|
||||||
) {
|
)
|
||||||
resetTracking()
|
|
||||||
return true
|
return true
|
||||||
}
|
|
||||||
triggerComputed(dep.computed)
|
triggerComputed(dep.computed)
|
||||||
if (this._dirtyLevel >= DirtyLevels.Dirty) {
|
if (this._dirtyLevel >= DirtyLevels.Dirty) {
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in New Issue