Avoid mutating a prop directly since the value will be overwritten...... Vue2组件props传值更改报错

vue2.0在使用props进行父子组件传值时,子组件需要改变props中的值报错!

以下是源代码:

props: {
        ratings: {
            type: Array,
            default() {
                return [];
            }
        },
        selectType: {
            type: Number
        }
},
methods: {
        select (type, event){
            if (!event._constructed){
                return
            }
            this.selectType = type
        }
    }

在Vue2中组件的props的数据流动改为了只能单向流动,即只能由组件外(调用组件方)通过组件的DOM属性attribute传递props给组件内,组件内只能被动接收组件外传递过来的数据,并且在组件内,不能修改由外层传来的props数据。

解决方案:

在data中创建一个变量 ratingType,并将 selectType 的值赋值给它,再在方法中调用即可。

 data () {
        return{
            ratingType: this.selectType
        }
    },
    methods: {
        select (type, event){
            if (!event._constructed){
                return
            }
            this.ratingType = type
        }
    }
搞定!

当在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、付费专栏及课程。

余额充值