vue 子组件中修改传入的 props 问题

vue 的开发中会遇到在子组件中修改传入的 props 数据, 而单向数据流的思想下 props 数据是不应该被直接修改的.

我觉得主要有两种常用方式, 一是吧props 数据转存到 data 中修改操作, 另一个是在子组件中更新父组件中的数据

props 值转存到 data 中

export default {
    props:{
      defaultValue:  {
        type: Object,
        default() {
          return {};
        },
      },
    },
    data(){
      return {
        value: {...this.defaultValue}
      }
    },
}

props 数据同步到 data 中

export default {
    props:{
      defaultValue: Object
    },
    data(){
      return {
        value: {}
      }
    },
    watch:{
      defaultValue:{
        deep: true, // 深度监听每一个属性值, 如果是对象可以深度监听
        immediate: true, // 进入页面后立即自动调用handler函数
        handler(newValue) {
            this.value = newValue
        }
      }

    }
}

update & sync 更新父组件传入的 props

父组件传值给 search-params 子组件 属性 message

<search-params :message.sync="message" >

子组件通过 emit 更新 message

export default {
    handleEvent(value){
        // value.data 获取输入框的值
       this.$emit('update:message', value.data)
    }
}

v-model 更新父组件传入的 props

父组件传值给 search-params 子组件 属性 message

<search-params v-model="message" >

子组件通过 emit 更新 message

export default {
    props:{
      value: String
    },
    methods:{
        handleEvent(value){
            this.$emit('input', value)
        }
    }
    
}

v-model attrs listeners 更新父组件传入的 props

父组件传值给 search-params 子组件 属性 message

<search-params v-model="message" >

子组件通过 attrs listeners 更新 message

<input type="text" :value="value" v-bind="$attrs" v-on="$listeners"/>

<script>
export default {
    props:{
      value: String
    },
}
</script>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

了 义

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

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

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

打赏作者

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

抵扣说明:

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

余额充值