Vue_avoid mutating a prop directly since the value will be overwritten

在vue.js中,在自定义一个组件的时候,可能会有这样的问题,当我们子组件中修改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属性的值,因为这个值随时都可能在父组件重新渲染时被覆写。解决方案是,将prop属性的值赋给data或computed属性的值。
那么,具体我们该怎么做呢?首先,看一下vue.js的官方文档

官方文档

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告(警告的内容就是上述那段英文)。

这里有两种常见的试图改变一个 prop 的情形:

这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。在这种情况下,最好定义一个本地的 data 属性并将这个 prop 用作其初始值:

props: ['initialCounter'],
data: function () {
  return {
    counter: this.initialCounter
  }
}

这个 prop 以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个 prop 的值来定义一个计算属性:

props: ['size'],
computed: {
  normalizedSize: function () {
    return this.size.trim().toLowerCase()
  }
}

 修改之后:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在Vue中使用props传递数据时,应该避免直接修改props的值,因为props的值会在父组件重新渲染时被覆盖。相反,应该使用基于props值的data或computed属性来处理数据。这样做可以防止子组件意外修改父组件的状态,使数据流向更加清晰易懂。 如果你想修改父组件传递的props值,可以在子组件中定义一个data变量,并使用props的值初始化它。然后,通过使用$emit方法通知父组件去修改props的值。 以下是一个示例代码: ```javascript // 父组件 <template> <div> <child-component :facomment="comment" @update-comment="updateComment"></child-component> </div> </template> <script> export default { data() { return { comment: 'Hello World' } }, methods: { updateComment(newComment) { this.comment = newComment; } } } </script> // 子组件 <template> <div> <input v-model="localComment" @input="updateParentComment"> </div> </template> <script> export default { props: ['facomment'], data() { return { localComment: this.facomment } }, methods: { updateParentComment() { this.$emit('update-comment', this.localComment); } } } </script> ``` 在上面的示例中,父组件通过props将comment传递给子组件。子组件使用v-model绑定一个本地的localComment变量,并在输入框的输入事件中触发updateParentComment方法。该方法通过$emit方法将localComment的值传递给父组件的updateComment方法,从而实现了修改父组件props的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值