v-model cannot be used on a prop, because local prop bindings are not writable

问题场景

父子组件通信时,我这里需要进行数据双向绑定(双向通信),正常父组件传向子组件数据是单向的,有时候需求需要双向的,然后我使用了v-model来实现双向绑定,父组件v-model子组件,子组件通过props接收,并在需要修改时触发update:X事件更新父组件值,从而实现双向绑定;看着没什么问题的操作,但是报错了,报错信息是:
报错信息

翻译一下是:在使用v-model时不能使用prop,因为本地绑定的prop是不可写的;
让使用v-bind绑定,然后用自定义事件监听更改值,通过emits触发更新。
这个是vue2的老套做法

这就纳闷了,我正是采用了vue3的新语法糖实现的啊,实际一样的操作,只不过是简写而已。

问题原因

我用的vue版本是3.4.21,查阅官方文档得知,自3.4版本以后,推荐使用defineModel() 宏来实现组件上的双向绑定;看到这大致明白了,因为vue3刚出来时,这个defineModel宏还是试验阶段,现在最新版后要推正式了,老旧的做法或许将被遗弃
组件间使用v-model的官方文档说明

问题解决

解决办法就是用最新做法使用defineModel()宏来实现组件间数据双向绑定;用这个宏确实比之前老旧用法更易懂直白,用了之后,一个字爽;具体用法可以看我上面给的链接,可以绑定多个或单个。

总结

vue自3.4版本以后,组件间数据双向绑定推荐使用defineModel()宏来实现,而不是用之前做法。/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Detectiveboy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值