# Flusso dei Dati
Costruiamo un semplice contatore tramite Vuex per avere una visione migliore su come i dati siano scambiati tra i vari componenti. Si noti che questo esempio è un'estremizzazione per spiegare alcuni concetti chiavi, Vuex non è utile per questo tipo di applicazioni molto semplici.
### Lo Store
``` js
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
// Stato iniziale della nostra applicazione
const state = {
count: 0
}
// Definiamo tutte le mutazioni
const mutations = {
INCREMENT (state) {
state.count++
},
DECREMENT (state) {
state.count--
}
}
// creiamo lo store
export default new Vuex.Store({
state,
mutations
})
```
### Action
``` js
// actions.js
export const increment = ({ dispatch }) => dispatch('INCREMENT')
export const decrement = ({ dispatch }) => dispatch('DECREMENT')
```
### Utilizziamo Vue
**Il Template**
``` html
Hai Cliccato: {{ count }} volte
```
**Lo Script**
``` js
// Stiamo importanto ed iniettando lo store perchè questo è il componente di root
// In un'applicazione grossa questo procedimento viene fatto una sola volta
import store from './store'
import { increment, decrement } from './actions'
const app = new Vue({
el: '#app',
store,
vuex: {
getters: {
count: state => state.count
},
actions: {
increment,
decrement
}
}
})
```
Ecco fatto, questa applicazione è molto semplice e mostra come le action, mutazioni e lo store funzionino in modo tale da manipolare, anche se in questo caso molto banalmente, lo stato in base agli eventi che arrivano dal template, o utente.
Noterete anche che il flusso dei dati è unidirezionale, come dovrebbe esserlo in Flux:
1. L'utente sfrutta un componente per eseguire delle action;
2. Le action avvitano le mutazioni che cambiano lo stato;
3. Una volta che lo stato cambia una proprietà dello store, tale cambiamento viene riflesso ai componenti tramite i getter.