You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue子组件出现Write operation failed: computed value is readonly报错排查

问题原因

你遇到的Write operation failed: computed value is readonly报错,核心原因是你把一个只读的计算属性直接绑定到了v-model上。

在子组件中,value是一个仅返回props.modelValue的计算属性,默认情况下Vue的计算属性是只读的。而vue-multiselect的v-model会尝试修改绑定的值,当它试图修改这个只读的计算属性时,就会触发这个报错。

修复方案

你需要把value改成一个可读写的计算属性,同时处理好与父组件modelValue的同步:

<script setup>
import VueMultiselect from 'vue-multiselect'
import 'vue-multiselect/dist/vue-multiselect.css'
import {defineEmits, computed} from "vue";

const props = defineProps({
        modelValue: {
          type: Array,
          default: () => [] // 给props设置默认值更安全
        },
        options: {
          type: Array,
          default: () => []
        }
});
const emit = defineEmits(['update:modelValue']);

// 修改为可读写的计算属性
const value = computed({
  get() {
    return props.modelValue
  },
  set(newVal) {
    emit('update:modelValue', newVal)
  }
})

// 注意:这里可以去掉@update:model-value事件监听,因为v-model已经通过计算属性的setter处理了同步
</script>

<template>
    <div>
        <vue-multiselect
            v-model="value"
            :options="options"
            :multiple="true"
            placeholder="Dil Seçin"
            label="name"
            track-by="name"
            :searchable="false"
            select-label="Seç"
            selected-label="Seçili"
            deselect-label="Seçimi Kaldır"
            :allow-empty="false">
        </vue-multiselect>
    </div>
</template>
额外说明
  • 移除了子组件中的@update:model-value="inputChanged"事件,因为可读写的计算属性已经通过set方法完成了向父组件的同步,不需要额外监听事件。
  • 给props添加了默认值,避免父组件未传递时出现undefined的问题。
  • 保持了原有的功能逻辑,同时解决了控制台报错的问题。

内容的提问来源于stack exchange,提问作者kralyolda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:01:17