Sono anche cresciuto MVC. Credo che avremo bisogno di immergerci in FLUX per capire il quadro completo.
La mia comprensione è che come modello HTML spostato nel browser (con framework Backbone o Angular), questa applicazione a una sola pagina può fornire una migliore esperienza interattiva per l'utente rispetto all'app Web tradizionale con manomissione lato server. Ad esempio, l'applicazione può contenere lo stato dell'applicazione e basarsi su alcuni aggiornamenti dell'azione utente vari elementi HTML istantaneamente senza round trip al server.
Ma lo stato di gestione si è rivelato complicato con Backbone o Angular 1.x (non sono sicuro di come Angular 2 lo gestisce finora), perché modelli MVC o MVx accoppiano il modello dati con la vista tramite controller o direttamente . Ma cosa succede se si desidera reagire in altre viste sul cambiamento di stato di questo modello? Angular 1 offre alcune funzionalità per la gestione di questo, ma puoi facilmente spararti a piedi con i controller nidificati o l'ambito nidificato.
Quindi movimento FLUX sta cercando di risolvere questo problema e ha introdotto questo flusso unidirezionale:
---- > Dispatcher ---- > State Store ------ > Componente (Visualizza) ----- > Dispatcher
Il componente oi vari componenti sono iscritti a determinate modifiche allo stato del modello e invia le azioni dell'utente a Dispatcher . Dispatcher basato su queste azioni aggiorna il modello (archivio di stato) , che può attivare nuovamente uno o più aggiornamenti di visualizzazione . L'azione del dispatcher non deve essere attivata dal solo componente. Può essere fatto anche dal server.
In questo modo la condivisione dello stato (modelli) tra le viste è molto più semplice.
Ora React.JS è un componente del diagramma sopra. La parte fondamentale è che non muta direttamente DOM, ma usa il concetto di shadow DOM, dove raccoglie le differenze rispetto al precedente stato DOM e le applica solo loro. Così puoi ri-renderizzare molto o anche tutti i tuoi componenti, senza preoccuparti soprattutto delle prestazioni.
La conseguenza di tutto questo è che il componente React ha questi problemi:
- È necessario utilizzare Shadow DOM per mutare HTML
- È necessario sottoscrivere modifiche al modello (State Store)
- È necessario inviare azioni contro State Store
Se si mescolano tutti questi problemi in un singolo componente, si ottiene JavaScript sepolto all'interno del modello come si è scritto. Sono stato anche inorridito da questo quando ho iniziato a esaminare queste aree di sviluppo dell'interfaccia utente.
L'ecosistema reattivo si sta evolvendo rapidamente e ci sono tentativi di migliorarlo. Per esempio guarda come Dan Abramov (creatore di una delle librerie di State Store più hot chiamata Redux) separa questi preoccupazioni nei cosiddetti tipi di componenti Presentational e Container .
Quindi lunga storia , all'inizio sembra un passo indietro, ma se ti immergi più a fondo, potresti ottenere benefici di manutenibilità molto più grandi a lungo termine in forma di vero modello di disaccoppiamento dalla vista.
BTW, ti consiglio di controllare questo video su FLUX vs MVC .