Logo Francesco Montelli
  • Home
  • About
  • Tecnologie
  • Esperienze
  • Istruzione
  • Di più
    Progetti Pubblicazioni Recent Posts
  • Articoli
  • Appunti
  • Dark Theme
    Light Theme Dark Theme System Theme
Logo Inverted Logo
  • Tags
  • Agent-Driven Development
  • Architettura
  • Autenticazione
  • Automazione
  • CAPI
  • CI/CD
  • Cluster API
  • Compliance
  • Composables
  • Containerizzazione
  • Controller
  • CRD
  • CSharp
  • Day 1 Operations
  • DevOps
  • Docker
  • DotNet
  • E2E
  • Event Streaming
  • Frontend
  • GitHub Actions
  • Go
  • Grafana
  • HashSet
  • Homelab
  • Image Builder
  • Infrastructure as Code
  • Ingress
  • Instrumentation
  • JavaScript
  • Kafka
  • Keycloak
  • Kind
  • Kubernetes
  • LGTM Stack
  • LINQ
  • Linux
  • Logging
  • Loki
  • Metrics
  • Mimir
  • Monitoring
  • N8n
  • NGINX
  • Node.js
  • Nuxt
  • OAuth2
  • Observability
  • OpenID Connect
  • OpenLayers
  • OpenTelemetry
  • Operator
  • Performance
  • Performance Testing
  • Pinia
  • Playwright
  • Production
  • Prometheus
  • Proxmox
  • Python
  • Routing
  • Security
  • Self-Hosted
  • Sharding
  • Sistemi Distribuiti
  • SRE
  • Sviluppo Locale
  • Telemetry
  • Tempo
  • Testing
  • ToLookup
  • Tracing
  • TypeScript
  • Ubuntu
  • VisualTesting
  • Vue
  • Vuetify
Hero Image
3 pattern (+1 anti-pattern) per eliminare la duplicazione in Vue 3

Nelle SPA di grandi dimensioni con Vue 3 è comune trovarsi con decine di pagine che sono variazioni dello stesso tema: stessa struttura, stesso boilerplate, stesse cinque righe di setup. Si parte con copia-incolla, poi un bug nel flusso di salvataggio va corretto in dodici posti. Tre pattern aiutano a gestire il problema, ciascuno per un tipo di duplicazione diverso. Un quarto caso mostra quando è meglio fermarsi. Gli esempi usano Nuxt 3 e Vuetify 3. Nel repository demo pinia-vue-demo si trova tutto il codice eseguibile.

  • Vue
  • Nuxt
  • Vuetify
  • Composables
  • Frontend
10 minuti Leggi
Hero Image
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.

  • Vue
  • Pinia
  • Nuxt
  • TypeScript
  • Frontend
10 minuti Leggi
Hero Image
OpenLayers e Vue 3: integrazione con composables e TypeScript

Il problema: Vue wrappa ciò che non dovrebbe OpenLayers è una libreria imperativa per mappe interattive. Si crea un oggetto Map, gli si passa un target DOM, si aggiungono layer e fonti dati chiamando metodi che mutano lo stato interno. Vue 3 funziona al contrario: si dichiara lo stato in una variabile reattiva, si usa quella variabile nel template, e il framework si occupa di aggiornare il DOM ogni volta che il valore cambia. Non serve manipolare il DOM manualmente.

  • Vue
  • OpenLayers
  • TypeScript
  • Nuxt
  • Composables
12 minuti Leggi
Navigazione
  • About
  • Tecnologie
  • Esperienze
  • Istruzione
  • Progetti
  • Pubblicazioni
  • Recent Posts
Contattami:
  • francesco@montelli.dev
  • monte97
  • Francesco Montelli

Avviso di responsabilità: Privacy Policy.


Toha Theme Logo Toha
Francesco Montelli
P.IVA: 02726990399
Creato con Hugo Logo