mirror of https://github.com/vuejs/core.git
refactor(reactivity): add instance check for effect (#9055)
This commit is contained in:
parent
5479d1e5bb
commit
e33d554cae
|
@ -585,6 +585,14 @@ describe('reactivity/effect', () => {
|
||||||
expect(runner.effect.fn).toBe(otherRunner.effect.fn)
|
expect(runner.effect.fn).toBe(otherRunner.effect.fn)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should wrap if the passed function is a fake effect', () => {
|
||||||
|
const fakeRunner = () => {}
|
||||||
|
fakeRunner.effect = {}
|
||||||
|
const runner = effect(fakeRunner)
|
||||||
|
expect(fakeRunner).not.toBe(runner)
|
||||||
|
expect(runner.effect.fn).toBe(fakeRunner)
|
||||||
|
})
|
||||||
|
|
||||||
it('should not run multiple times for a single mutation', () => {
|
it('should not run multiple times for a single mutation', () => {
|
||||||
let dummy
|
let dummy
|
||||||
const obj = reactive<Record<string, number>>({})
|
const obj = reactive<Record<string, number>>({})
|
||||||
|
|
|
@ -16,7 +16,7 @@ import { ComputedRefImpl } from './computed'
|
||||||
// which maintains a Set of subscribers, but we simply store them as
|
// which maintains a Set of subscribers, but we simply store them as
|
||||||
// raw Sets to reduce memory overhead.
|
// raw Sets to reduce memory overhead.
|
||||||
type KeyToDepMap = Map<any, Dep>
|
type KeyToDepMap = Map<any, Dep>
|
||||||
const targetMap = new WeakMap<any, KeyToDepMap>()
|
const targetMap = new WeakMap<object, KeyToDepMap>()
|
||||||
|
|
||||||
// The number of effects currently being tracked recursively.
|
// The number of effects currently being tracked recursively.
|
||||||
let effectTrackDepth = 0
|
let effectTrackDepth = 0
|
||||||
|
@ -181,7 +181,7 @@ export function effect<T = any>(
|
||||||
fn: () => T,
|
fn: () => T,
|
||||||
options?: ReactiveEffectOptions
|
options?: ReactiveEffectOptions
|
||||||
): ReactiveEffectRunner {
|
): ReactiveEffectRunner {
|
||||||
if ((fn as ReactiveEffectRunner).effect) {
|
if ((fn as ReactiveEffectRunner).effect instanceof ReactiveEffect) {
|
||||||
fn = (fn as ReactiveEffectRunner).effect.fn
|
fn = (fn as ReactiveEffectRunner).effect.fn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue