Tengo un gancho muy simple que funciona según lo previsto:
const subscriptions: Subscription[] = [] const useEvents = () => { const subscribe = (type: Type, callback: () => void) => { const id = nanoid(8) subscriptions.push({ id, type, callback, }) return () => { subscriptions.splice( subscriptions.findIndex((s) => s.id === id), 1 ) } } const dispatch = (type: Type) => { for (const subscription of subscriptions.filter((s) => s.type === type)) { subscription.callback() } } return { subscribe, dispatch } }Me suscribo entonces:
useEffect(() => { subscribe("run", () => { console.log("RUN!!") }) }, [])El problema es que cuando la aplicación se recarga en caliente, se vuelve a llamar a Subscribe y se duplica la devolución de llamada, ¿hay alguna forma de evitar esto?