警告信息:
浏览器控制台警告:Write operation failed: computed value is readonly
使用环境:
Vue 3.2.41
Chrome x64 v103.0.5060.66
报错情景:
利用Vue的响应式修改某个值时出现该警告。
<template>{{ msg }}<br><button @click="add">+</button></template>
<script setup lang="ts">import { computed, ref} from 'vue'const x = ref('-')// 计算属性const msg:any= computed(()=>{return x.value + '-'})// 修改 计算属性的值 的方法const add = () => {msg.value = msg.value + '???'}</script>
报错原因:
修改的值是计算属性,而计算属性是只读的。所以无法修改。
解决方法:
为计算属性配置修改方法,如下:
<script setup lang="ts">import { computed, ref} from 'vue'const msg = ref('-')// 计算属性const computedMsg: any = computed({get() {// 这里返回的值是获取计算属性的值return msg.value + '-'},set(newValue) {// 参数newValue是被修改后的值// 这里是修改的具体逻辑/* 注意这里不要使用下面的方法修改计算属性的值来达到修改目的 而应该直接修改源响应数据xxx的值*/msg.value = newValue// computedMsg.value = newValue}})// 修改 计算属性的值 的方法const add = () => {computedMsg.value = computedMsg.value + '???'}</script>
参考:
计算属性 | Vue.js