La risposta di @ jpdelatorre è ottima nell'evidenziare le ragioni generali per cui un componente React potrebbe ricalcolare.
Volevo solo immergermi un po 'più in profondità in un'istanza: quando i puntelli cambiano . Risolvere i problemi che causano il rendering di un componente React è un problema comune e nella mia esperienza molte volte rintracciare questo problema implica determinare quali oggetti di scena stanno cambiando .
Riattiva i componenti riattivi ogni volta che ricevono nuovi oggetti di scena. Possono ricevere nuovi oggetti di scena come:
<MyComponent prop1={currentPosition} prop2={myVariable} />
o se MyComponent
è collegato a un negozio redux:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
Sempre il valore di prop1
, prop2
, prop3
, o prop4
modifiche MyComponent
si ri-rendering. Con 4 oggetti di scena non è troppo difficile rintracciare quali oggetti di scena stanno cambiando inserendo un console.log(this.props)
a quell'inizio del render
blocco. Tuttavia, con componenti più complicati e sempre più oggetti di scena questo metodo è insostenibile.
Ecco un approccio utile (usando lodash per comodità) per determinare quali modifiche all'elica stanno causando il rendering di un componente:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
L'aggiunta di questo frammento al componente può aiutare a rivelare il colpevole causando ritrasformazioni discutibili e molte volte ciò aiuta a far luce sui dati non necessari che vengono convogliati nei componenti.
shouldComponentUpdate
per disabilitare l'aggiornamento automatico dei componenti e quindi iniziare la tua traccia da lì. Maggiori informazioni possono essere trovate qui: facebook.github.io/react/docs/optimizing-performance.html