Ho creato la mia prima applicazione React con negozi con stato nel modo "normale" e ora sto cercando di utilizzare uno stato globale immutabile come quello utilizzato nello starterkit .Quali sono gli svantaggi dell'utilizzo dello stato immutabile in React?
- Lo stato di tutti i negozi è tenuti insieme in un'unica struttura di dati immutabili
- componenti hanno statali ma accesso ai dati in loro render() sulla base di una funzione di memorizzazione getter
- negozi sono anche stateless ma mutare lo stato dell'applicazione globale per il loro dominio utilizzando un cursore.
- Il componente di livello superiore dell'app ascolta le modifiche di stato e esegue nuovamente il rendering dell'intero albero dei componenti.
- I componenti sono implementati come "puri", ovvero utilizzano shouldComponentUpdate per calcolare in modo efficiente che possono essere saltati nel re-rendering.
Semplifica la struttura dell'applicazione in alcuni modi:
- componenti non ascoltano i negozi e anche non copiare memorizzare i dati al loro stato locale. Prendono semplicemente il loro stato di negozio su ogni rendering.
- Lo stato globale è sempre un'istantanea dell'intera applicazione, rendendo più facile il debug e l'aggiunta di funzionalità come Annulla banale.
- Lo stato globale sembra semplificare il rendering isomorfo.
Ho letto solo cose positive sull'utilizzo di dati immutabili con React, e si raccomanda di evitare lo stato nei componenti, quindi mi chiedo se ci sono degli svantaggi. Ho pensato che ci fosse perché altrimenti non vedo perché non è raccomandato come il modo per strutturare le app React.
L'immutabilità è nuova per me, quindi ci sono delle avvertenze che dovrei essere a conoscenza se inizi a utilizzare questo approccio in un'app complessa del mondo reale?
L'unica cosa minore che posso pensare è l'uso di forceUpdate() come Este lo sta usando, come ho letto che è una funzione sincrona. Per esempio, Morearty sembra rimandare gli aggiornamenti al prossimo fotogramma dell'animazione per ridimensionarli, ma ritengo che questo sia un dettaglio/ottimizzazione dell'implementazione e non alcuni aspetti negativi dell'approccio immutabile allo stato unico.
Probabilmente più creazione di oggetto (poiché le funzioni di manipolazione dati restituiscono copie), e quindi maggiore utilizzo di memoria e tasso di abbandono del GC. – joews
@joews non necessariamente. I progetti che utilizzano strutture dati persistenti, come [mori] (http://swannodette.github.io/mori/), non comportano costi in questo modo. –
@DavinTryon Sono d'accordo, quindi "probabilmente" - accadrà a meno che non si adottino misure per evitarlo. – joews