EventEmitter
非嵌套关系的组件实现通信
在
componentDidMount
事件中,如果组件挂载完成,再订阅事件;在组件卸载的时候,在componentWillUnmount
事件中取消事件的订阅; 以常用的发布/订阅模式举例,借用Node.js Events
模块的浏览器版实现
实现这样一个功能: 点击List2
中的一个按钮,改变List1
中的信息显示
1 | npm install events --save |
在src
下新建一个util
目录里面建一个events.js
1 | import { EventEmitter } from 'events'; |
1 | // list1.jsx |
1 | // List2.jsx |
1 | // APP.jsx |
自定义事件是典型的发布订阅模式,通过向事件对象上添加监听器和触发事件来实现组件之间的通信
(2)辅助 toolbox
实现 create
和 destory
需求是一个长按弹出的 toolbox
框框,要实现点击其它非 toolbox 区域框框消失的功能
之前的方式:
1 | // utils/toolbox.js |
useClickAway
是自定义的 Hooks
1 | export default function useClickAway( |
一般情况下没有问题…但是中间遇到很奇怪的bug…原因没有研究出来
最后还是用 eventEmitter
解决的
1 | // com/toolbox.js |