perf(reactivity): ref should not trigger if value did not change
Note: shallowRef will always trigger on assignment because it does not account for deep mutations close #1012
This commit is contained in:
@@ -22,11 +22,19 @@ describe('reactivity/ref', () => {
|
||||
it('should be reactive', () => {
|
||||
const a = ref(1)
|
||||
let dummy
|
||||
let calls = 0
|
||||
effect(() => {
|
||||
calls++
|
||||
dummy = a.value
|
||||
})
|
||||
expect(calls).toBe(1)
|
||||
expect(dummy).toBe(1)
|
||||
a.value = 2
|
||||
expect(calls).toBe(2)
|
||||
expect(dummy).toBe(2)
|
||||
// same value should not trigger
|
||||
a.value = 2
|
||||
expect(calls).toBe(2)
|
||||
expect(dummy).toBe(2)
|
||||
})
|
||||
|
||||
@@ -174,6 +182,22 @@ describe('reactivity/ref', () => {
|
||||
expect(dummy).toBe(2)
|
||||
})
|
||||
|
||||
test('shallowRef force trigger', () => {
|
||||
const sref = shallowRef({ a: 1 })
|
||||
let dummy
|
||||
effect(() => {
|
||||
dummy = sref.value.a
|
||||
})
|
||||
expect(dummy).toBe(1)
|
||||
|
||||
sref.value.a = 2
|
||||
expect(dummy).toBe(1) // should not trigger yet
|
||||
|
||||
// force trigger
|
||||
sref.value = sref.value
|
||||
expect(dummy).toBe(2)
|
||||
})
|
||||
|
||||
test('isRef', () => {
|
||||
expect(isRef(ref(1))).toBe(true)
|
||||
expect(isRef(computed(() => 1))).toBe(true)
|
||||
|
||||
Reference in New Issue
Block a user