背景
在 Vue 3 中,有一个需求,想要通过判断用户是否传入事件处理函数,如果传入事件处理函数证明点击事件需要被处理,来决定是否给元素添加 pointer 的样式,因此我们需要有一种方式能访问到传入的事件处理函数。
思路
在看 Vue 源码的时候我们知道其实本质上事件处理函数也是挂载在 props
上的,因此我尝试直接通过 $props
去获取,结果发现并无法获取,结合之前看的源码,props
本质上也是一个 Proxy,在这个 Proxy get
的时候会去判断这个属性是否显式地在 props
上定义,如果是的话才会返回,否则就不返回,直观的表现就是无法访问到这个属性。很明显我们是通过 defineEmits
去定义的事件,因此 props
这个 Proxy get
的时候并不会将事件处理函数返回。