跨组件通信
eventemitter相关
跨组件通信
遇到的使用场景:在当前页面中有一个table表格组件(叫table1吧),其中中确认、拒绝了一个订单的请求后,需要调用子表格组件中的方法,更新子表格组件中的信息(table2),项目没有用redux,选择使用EventEmitter进行跨组件通信
然后写一个eventBus.js
import EventEmitter from 'event-emitter';
const eventBus = new EventEmitter();
export default eventBus;
在需要的地方引入这个js文件
具体使用方法: 当前组件中监听eventBus:
const handletest = async ()=>{
try{
if(...){
eventBus.emit('yourBusName')
}
//...code
}
catch{
//...code
}
}
子组件中创建一个eventBus:
const handleSomething= () => {
fetchSomething(balabala);
};
useEffect(() => {
eventBus.on('yourBusName', handleSomething);
return () => {
eventBus.off('yourBusName', handleSomething);
};
}, [balabala]);
简单参考
const fetchSomething= async () => {
try {
const response = await api.hahaha({ balabala: balabala});
const rawData = response.data;
const data = Array.isArray(rawData.details)
? rawData.details.map((item, index) => ({
key: index,
//...其他的参数
}))
: [];
} catch (error) {
console.log(error);
}
};
这样实现的效果是:当前页面调用handleConfirm时,某些条件下触发子组件中名为yourBusName的eventBus,子组件中的eventBus会调用fetchSomething方法更新一些数据 有什么好处? 简单一点,不用引入redux