,大家好,我是前端西瓜哥。,事件订阅是模块间解耦的常见方式。,比如相隔遥远的两个组件,可以通过一个订阅,一个发布的方式,实现数据通信。,下面我们来看看事件订阅的几种设计风格。,第一种是 使用监听器函数本身作为标识符。,常见的场景有 DOM 事件的绑定:,此外还有 Node.js 的 EventEmitter 类,很多支持监听事件的类都继承了它。用法为:,原理很简单,就是维护一个映射表上,key 为事件名,value 为要顺序执行的监听器,大概这样:,一个监听器函数就是一个唯一的对象,通过它可以找出在对应事件下的位置,将其从列表中移除,就算是取消了事件绑定。,取消绑定逻辑大概为:,通过一个 id 来代表绑定的监听器。,经典场景为 setTimeout:,实现原来基本类似前一种方式,只是改为用 id 来作为标识。,上面两种写法,都需要一个变量额外保存标识,然后再使用事件订阅对象专门的取消订阅函数,难免有点繁琐。,我们对第一种风格,可以做一个封装:,这种写法直接调用返回的函数即可解绑,不需要保存 id 和一个专门的取消订阅函数,代码更简洁。,常见场景是 React 的 useEffect:,三种风格,第一种是监听器本身作为标识,第二种是使用额外的一个 id(数字或字符串)来代表监听器,第三种是在调用监听方法时,直接返回一个可以取消监听的函数。
文章版权声明
1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/17140.html
2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈
3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)
4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别