prop的单向数据流

前言

在Vue的子组件中去修改父组件通过prop传过来的对象时,控制台报错,报错信息如下:error Unexpected mutation of “xxxx“ prop,这背后的原因是什么呢,下面我将结合实际开发的报错信息和Vue.js官方文档带大家深入理解prop的单向数据流;
在这里插入图片描述

报错原因分析

代码如下所示:

<script>
export default {
  data() {
    return {
      flag: '',
    }
  },
  //props传入的todo使用要加上this
  props: ['todo'],
  methods: {
    changeDone() {
      this.todo.done = this.flag
    },
  },
}
</script>

以上代码中可以看出此组件用props接收了一个todo对象,而我在methods对象中定义了一个函数,直接访问todo对象并且,修改了其中的done属性,导致了控制台报错;首先我们查阅官方文档看看,文档对prop的说明,文档中清楚的说明了prop的单向数据流,强调了父子组件之间形成了一个单向下行绑定;如果在子组件内部更改prop,会导致浏览器报错;
在这里插入图片描述

解决办法

对于以上错误,我们已经明确了原因,那么我们如果一定要修改父组件传入的数据,而且不影响父组件呢?下面我们来看看Vue官方文档提供的方法:
在这里插入图片描述
以上图片看出Vue官方文档明确了两种变更prop的情形,第一种是在本地的data对象中添加属性,并且将 父组件传入的prop作为初始值;第二种是定义一个计算属性,用传入的prop属性进行计算;
特别强调注意在 JavaScript 中对象和数组是通过引用传入的,所以对于一个数组或对象类型的 prop 来说,在子组件中改变变更这个对象或数组本身将会影响到父组件的状态
更详细的信息请查看:Vue.js官方文章

写在最后

🥂(❁´◡`❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞

评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值