2016-01-20 14 views
7

Ho letto alcuni su Redux. La maggior parte di ciò che leggo è la combinazione di redux con reagire. Io uso Angularjs. C'è una buona ragione per usare Redux vs semplicemente gestire lo stato all'interno di angularjs scope e consentire angolare di gestire i bindingAngularjs con redux

+0

Redux è destinato all'uso con librerie di viste (come il già citato React). Angular è molto più di una semplice libreria di visualizzazione, è un framework. Cosa stai cercando di realizzare esattamente con Redux che non sei già in grado di risolvere con Angular? Sembra che unire i due implicherebbe un sacco di sovrapposizioni di funzioni/duplicazione di codice. –

+0

Niente. Ho appena fatto un rapido google per angularjs e redux. C'erano articoli sull'utilizzo di redux per gestire lo stato in angolare e mi chiedevo, perché lo avresti fatto. Penso che tu abbia risposto alla mia domanda. –

+0

Onestamente, non ho mai pensato di mescolare i due :). Non posso commentare alcun potenziale beneficio, sembra solo un bizzarro abbinamento. Hai dei link agli articoli che hai citato? –

risposta

18

Redux ha vantaggi con Angular 1.x se si dispone di molto stato condiviso. Nell'app Angular su cui lavoro abbiamo molte pagine con un modello condiviso e diversi componenti che apportano modifiche (sovrapposte) a quel modello. Non è sempre facile mantenere i dati sincronizzati o avere un modo standard per le modifiche. Redux è un buon modo per farlo, sebbene tu possa certamente implementare qualcosa di simile usando solo i servizi Angular. Il flusso di dati a senso unico che Redux utilizza è più semplice (secondo me) di quello che si fa normalmente in Angular. Viceversa, l'introduzione di Redux probabilmente danneggia la tua capacità di scrivere prototipi veramente veloci, dal momento che c'è un po 'più di lavoro per trasmettere i dati. Questo non mi importa, ma potrebbe importare agli altri.

Il principale principles of Redux applicano ancora in applicazioni angolari:

  • Unica fonte di verità (singolo oggetto di stato). Come ho detto sopra, penso che sia più facile gestire lo stato quando si trova in un singolo posto rispetto a gestito in diversi ambiti o servizi angolari. Scope-soup è un vero problema in alcune app.
  • Lo stato è immutabile. Questo è il punto in cui entra in gioco la maggior parte degli attriti con Angular, dal momento che Angular (e Javascript) rendono i dati mutanti davvero facili. Ma ti aiuta a scrivere codice più sicuro. Dato che puoi modificare un oggetto immutabile solo creando una copia, puoi essere più sicuro che qualsiasi manipolazione di dati che stai facendo in una direttiva non infrangerà altre direttive. E al contrario, puoi aspettarti che altre direttive non stiano modificando i tuoi dati. Tutte queste modifiche passano attraverso un luogo centrale (il singolo oggetto di stato, tramite riduttori), quindi è più facile trovarle.
  • Le modifiche sono fatte da pure funzioni. Penso che questo sia utile in qualsiasi applicazione JS. Più codice hai che non ha un sacco di effetti collaterali o dipendenze del framework, più facile è la tua app da capire e testare. Molti dei nostri test per il codice angolare hanno una serie di regole per l'installazione delle app. Testare un riduttore è incredibilmente semplice al confronto, poiché è solo una funzione Javascript.

Utilizzare Redux significa che meno del codice è angolare-centrico. Ciò significa che hai un percorso di aggiornamento più semplice se decidi di non utilizzare Angular. O anche se vuoi semplicemente migrare ad Angular 2. Quanto è più facile dirlo, però.

Non penso che ci sia un sacco di sovrapposizioni a causa del fatto che Angular è più un framework che una libreria, ma ci sono cose in Redux che non puoi trarre il massimo vantaggio da Angular. Potresti sapere esattamente quale parte del tuo stato dell'app sta cambiando, ma Angular sta eseguendo il ciclo di digest e controllerà comunque tutto. Angular 2 è migliore a questo proposito, però. Dovrai saltare attraverso alcuni cerchi per far funzionare tutte le tue direttive con dati immutabili. E soprattutto se vuoi inviare ogni campo un utente cambia attraverso il negozio Redux, dal momento che ng-model vuole mutare la proprietà che tu passi.

Ogni app è diversa, ma l'uso di Redux ha senso nel tipo di app Angolari su cui ho lavorato.

+0

JeffB ha menzionato l'invio di ogni campo a un utente che cambia nel negozio. È questo un caso per caso? Immagino che spetti al progettista determinare quale livello di stato dell'applicazione vogliono mantenere, correggere? – cgatian

+0

Sì, dipende dalle tue esigenze o dalle preferenze degli sviluppatori. È difficile salvare ogni modifica di input dell'utente nell'archivio Redux, poiché ng-model modifica i dati direttamente. È più facile creare una copia mutabile quando un utente deve inserire i dati del modulo, quindi salvare i risultati nell'archivio di Redux quando hanno finito. Ma potresti avere requisiti che non funzionano con questo approccio. – JeffB

+0

Ho pensato tanto. Se potessi, ho la seguente domanda là fuori. Tutto il consiglio sarebbe apprezzato. http://stackoverflow.com/q/37265869/684869 – cgatian

0

Redux può essere utilizzato con qualsiasi tecnologia javascript. In sintesi puoi integrarlo in un progetto Agular. Al giorno d'oggi, sta trasformando il modo in cui sono costruite le applicazioni. Consente un nuovo modo di concepire le applicazioni utilizzando un flusso di dati unidirezionale. Di conseguenza, questo ti dà un controllo migliore sullo stato e sugli strumenti dell'applicazione per sradicare i problemi associati alla mutabilità dei dati. Dai un'occhiata a questo fantastico tutorial about using Redux in Angular projects.