props/$emit组件通信及语法糖的使用

props/$emit

子组件想要显示父组件的数据,就props。 子组件想要改变父组件的数据,就$emit

v-model语法糖

  • v-model是 属性value事件input 的语法糖。
  • 适用于:触发事件返回的值 正是 属性要改的值,一般是单一属性。比如触发事件返回的值正好就是该属性的新值;
  • 适用于:表单类的组件,因为属性和事件默认是valueinput

.sync语法糖

  • .sync语法糖默认是 属性xxx事件update:xxx
  • 适用于触发事件返回的值 正是 属性要改的值,一般是单一属性
  • 适用于:非表单类的组件

v-modal:xxx语法糖

  • vue3新增,取代了.sync语法糖
  • 父组件的变化:
 原生写法:父组件监听update:checked事件并接收子组件传入的值
 <custom-checkbox :checked="selectFramework" @update:checked="selectFramework = $event"></custom-checkbox>
 
 .sync语法糖写法:其中的prop属性为checked,event事件为update:checked
 <custom-checkbox :checked.sync="selectFramework"></custom-checkbox>
 
 v-model:xxx语法糖写法:prop属性为checked,event事件为update:checked
 <custom-checkbox v-model:checked="selectFramework"></custom-checkbox>
 
  • 子组件没有变化,仍然是props接收父组件传入的属性值,通过$emit触发事件返回属性的值。

总结

  • props/$emit是父子组件最常用的通信方式,而v-model.sync只是其语法糖
  • vue3后都开始使用v-modal:xxx语法糖;
  • 语法糖的缺点是子组件只是单一的修改某个父组件值,复杂逻辑还是老实用props/$emit
  • 其实语法糖只是在父组件用的时候更加方便,而子组件该咋样还是咋样。

参考

  1. props/$emit、v-model、.sync的适用场景 -- vue组件通信系列
  2. vue3中v-model的重大更新
  3. 总结Vue组件的通信
上一篇:新建word文档没保存能恢复吗(已有579人收藏)


下一篇:Go面试题(四):锁的实现原理--sync.RWMutex 篇