В самом простом варианте это делается вообще ну типа так
const createEvent = () => {
let subs = [];
function event(payload){
subs.forEach(sub=>sub(payload))
}
event.listen = (handler) => {subs.push(handler);}
event.off = handler => {subs = subs.filter(sub => sub!==handler)}
return event;
}
Дальше можешь делать
exporet const somethingHappened = createEvent();
Где-то в одной части приложения
import {somethingHappened} from './events'
somethingHappenned.listen((value)=>{
//rerender something, change state, etc
})
Где-то в другой части приложения
import {somethingHappened} from './events'
somethingHappened('Hello from the other side!');