记录:Vue 子组件修改父组件传来的props值报错问题

本文介绍如何在Vue.js中正确地使用computed属性来处理来自父组件的props,并实现v-model双向绑定,避免直接修改props导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是工作中遇到问题解决后的记录,方便以后查阅。

父组件传值给子组件props,子组件将props接受到的值用做v-model双向数据绑定

因为props是只读的,不能修改 直接修改会报下面的错误

 Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "isShow"

避免直接改变 prop,因为每当父组件重新渲染时,值都会被覆盖。 相反,根据道具的值使用数据或计算属性。 道具被变异:“isShow”

网上也看到了解决方案:子组件的props传值给data。为一般认为,props的值是只读的,只有data才可以修改,所以要将props传给data。但是在我这里并没有什么卵用。

后来做了一番“骚操作”,用 computed 的set、get方式来做中转。

 // 父组件
<template>
<div @click="handleChangeShow"></div>
<AnchorRecruitPopup :isShow.sync="show"></AnchorRecruitPopup>
</template>

export default {
  name: "anchorRecruit",
  data() {
    return {
      show: false
    };
  },
  components: {
    AnchorRecruitPopup
  },
  methods: {
    handleChangeShow() {
      this.show = true;
    },
}
// 子组件
<template>
  <van-popup
    v-model="show"
    :round="true"
    closeable
    close-icon="close"
    close-icon-position="bottom-right"
  >
    <div>内容</div>
  </van-popup>
</template>

<script>
export default {
  props: ["isShow"],  //接收父组件传值
  computed: {
    show: {
      get() {
        return this.isShow;
      },
      set(val) {
        this.$emit("update:isShow", val);
      },
    },
  },
};
</script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值