2016-07-06 21 views
5

Ho imparato ReactJS per un po 'di tempo. Una delle cose che mi lascia perplesso è il motivo per cui ReactJS utilizza l'immutabilità in molti aspetti come oggetti di scena, elementi, ecc. Esiste una ragione specifica per questo? Qual è la filosofia alla base di questo?ReactJS e immutability

Quando provo ad aggiungere una nuova proprietà a props, viene visualizzato l'errore seguente.

TypeError Uncaught: Impossibile aggiungere proprietà di me, oggetto non è estensibile

risposta

3

React utilizza l'immutabilità per ovvi motivi di prestazioni. Per esempio

idea è ogni volta che si sta impostando uno stato, voi non mutare uno stato, ma si clonare una parte di esso e quindi aggiornare lo stato

Per esempio

this.state = { 
entries: [1,2,3] 
} 

si dovrebbe fare

this.state.setState({ 
entries: this.state.entries.slice().push(9); //not this.state.entries.push(9) 
}) 

guadagni di prestazioni si ottengono quando si utilizza shouldComponentUpdate

in shouldComponentUpdate si può semplicemente confrontare i riferimenti e non a causa profonda verifica

shouldComponentUpdate(prevState,newState){ 
    return prevState.entries != newState.entries 

} 
+0

Puoi descrivere ancora un po 'quali sono i guadagni in termini di prestazioni che realizziamo qui? – VJAI

+0

In questo particolare esempio, probabilmente non molto, considerando la dimensione dei dati e la mancanza di altri componenti. In un'applicazione più grande con più alberi di componenti con qualsiasi albero a singolo componente non si aggiorna quando le modifiche di stato possono aumentare notevolmente le prestazioni dell'applicazione durante un nuovo rendering. –

5

La filosofia alla base di questo flusso di dati è un modo - flussi di dati verso il basso (dal livello superiore ai componenti foglia) e le azioni portate fino.

Un componente riceve i dati dagli oggetti di scena, e per cambiare qualcosa, deve chiamare il suo genitore e chiedere di cambiare qualcosa - tramite una funzione di callback di solito.

È possibile leggere ulteriori informazioni a riguardo nella pagina Thinking in React del sito Web ufficiale, spiega abbastanza bene il concetto.

+2

vorrei aggiungere che il flusso di dati unidirezionale è molto più prevedibile rispetto associazioni bidirezionali. Quest'ultimo può essere più facile da capire concettualmente, ma il primo vince con facilità di debug/prevedibilità. – lux