feat(computed): warn if trying to set a readonly computed (#161)
This commit is contained in:
parent
7963c01a67
commit
530be302fc
@ -1,6 +1,16 @@
|
|||||||
import { computed, reactive, effect, stop, ref } from '../src'
|
import {
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
effect,
|
||||||
|
stop,
|
||||||
|
ref,
|
||||||
|
WritableComputedRef
|
||||||
|
} from '../src'
|
||||||
|
import { mockWarn } from '@vue/runtime-test'
|
||||||
|
|
||||||
describe('reactivity/computed', () => {
|
describe('reactivity/computed', () => {
|
||||||
|
mockWarn()
|
||||||
|
|
||||||
it('should return updated value', () => {
|
it('should return updated value', () => {
|
||||||
const value = reactive<{ foo?: number }>({})
|
const value = reactive<{ foo?: number }>({})
|
||||||
const cValue = computed(() => value.foo)
|
const cValue = computed(() => value.foo)
|
||||||
@ -157,4 +167,14 @@ describe('reactivity/computed', () => {
|
|||||||
plusOne.value = 0
|
plusOne.value = 0
|
||||||
expect(dummy).toBe(-1)
|
expect(dummy).toBe(-1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should warn if trying to set a readonly computed', () => {
|
||||||
|
const n = ref(1)
|
||||||
|
const plusOne = computed(() => n.value + 1)
|
||||||
|
;(plusOne as WritableComputedRef<number>).value++ // Type cast to prevent TS from preventing the error
|
||||||
|
|
||||||
|
expect(
|
||||||
|
'Write operation failed: computed value is readonly'
|
||||||
|
).toHaveBeenWarnedLast()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -29,7 +29,9 @@ export function computed<T>(
|
|||||||
: (getterOrOptions as WritableComputedOptions<T>).get
|
: (getterOrOptions as WritableComputedOptions<T>).get
|
||||||
const setter = isReadonly
|
const setter = isReadonly
|
||||||
? () => {
|
? () => {
|
||||||
// TODO warn attempting to mutate readonly computed value
|
if (__DEV__) {
|
||||||
|
console.warn('Write operation failed: computed value is readonly')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
: (getterOrOptions as WritableComputedOptions<T>).set
|
: (getterOrOptions as WritableComputedOptions<T>).set
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user