警告信息:

浏览器控制台警告: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