vue出现Avoid mutating a prop directly since the value... 问题解决方案

今天在写一个自己的弹窗组件时候发现一个bug,虽然只是一个警告,但还是想方法解决了下

触发原因

如果你写一个弹窗组件,父亲通过showBottom控制该组件的打开关闭,然后子组件将showBottom改成false,问题就出现了。(这里不用emit的原因是父组件其实没必要在写一个方法去监听这个方法)

vue是不建议通过子组件擅自更改父组件传过来的值的。

会报错:

在这里插入图片描述
报错代码如下

父组件

 <cartBottom  v-if='showBottom' :showBottom='showBottom'></cartBottom>

子组件

hiddenBottom() {
  this.showBottom = !this.showBottom; //这里抛出错误
}

解决方法

  1. 最简单的方法就是 将showBottom变成一个对象比如 a.showBottom = true,
    然后传到子组件在通过子组件直接a.showBottom=false直接改,这样是不会报错的。
  2. 可以通过.sync的特点使用emit(“update:showBottom”,false)将值自动改掉。(双向绑定)

代码如下:

父组件

 <cartBottom  v-if='showBottom' v-bind:showBottom.sync='showBottom'></cartBottom>

子组件

 hiddenBottom() {
      // this.showBottom = !this.showBottom
     this.$emit('update:showBottom',!this.showBottom)
  },

这样就能做到不通过emit绑定事件来将值修改成false。

第二种方法也可以用于父子组件传值之间的互相修改。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值