Da EventBus a Pinia: migrazione progressiva dello stato in Vue 3
EventBus: stato implicito distribuito tra componenti In Vue 2, Vuex era la soluzione ufficiale per lo stato condiviso, ma molti progetti lo evitavano per la sua verbosità e ricorrevano all’EventBus: un’istanza new Vue() usata come emettitore di eventi tramite $on/$emit/$off. Ogni componente che aveva bisogno di dati li recuperava con chiamate API proprie. Nessuna cache, nessuno stato centralizzato.
I limiti di questo approccio sono noti:
Nessuna single source of truth - lo stato vive negli eventi, non c’è modo di ispezionare il valore corrente Timing fragile - un evento emesso prima che il listener sia montato va perso Memory leak - ogni $on senza il corrispondente $off nel beforeDestroy accumula listener orfani Debugging opaco - i DevTools non mostrano nulla, gli eventi sono fire-and-forget In Vue 3, new Vue() è sostituito da createApp() e soprattutto $on/$off/$once sono rimossi dalle istanze componente. L’EventBus non è più possibile. Le alternative sono due: una libreria di eventi esterna (mitt, tiny-emitter) che mantiene lo stesso pattern con gli stessi limiti, oppure uno state management esplicito con Pinia.