La respuesta de @ jpdelatorre es excelente para destacar las razones generales por las que un componente React podría volver a renderizarse.
Solo quería profundizar un poco más en una instancia: cuando cambian los accesorios . La resolución de problemas que está causando que un componente React se vuelva a procesar es un problema común, y en mi experiencia, muchas veces rastrear este problema implica determinar qué accesorios están cambiando .
Los componentes de reacción se renderizan cada vez que reciben nuevos accesorios. Pueden recibir nuevos accesorios como:
<MyComponent prop1={currentPosition} prop2={myVariable} />
o si MyComponent
está conectado a una tienda redux:
function mapStateToProps (state) {
return {
prop3: state.data.get('savedName'),
prop4: state.data.get('userCount')
}
}
Cada vez que el valor de prop1
, prop2
, prop3
, o prop4
cambios MyComponent
será volver a hacer. Con 4 accesorios, no es demasiado difícil rastrear qué accesorios están cambiando colocando un console.log(this.props)
al comienzo del render
bloque. Sin embargo, con componentes más complicados y más y más accesorios, este método es insostenible.
Aquí hay un enfoque útil (usando lodash por conveniencia) para determinar qué cambios de utilería están causando que un componente se vuelva a renderizar:
componentWillReceiveProps (nextProps) {
const changedProps = _.reduce(this.props, function (result, value, key) {
return _.isEqual(value, nextProps[key])
? result
: result.concat(key)
}, [])
console.log('changedProps: ', changedProps)
}
Agregar este fragmento a su componente puede ayudar a revelar al culpable que causa reprocesamientos cuestionables, y muchas veces esto ayuda a arrojar luz sobre los datos innecesarios que se canalizan a los componentes.
shouldComponentUpdate
para deshabilitar la actualización automática de componentes y luego comenzar su rastreo desde allí. Puede encontrar más información aquí: facebook.github.io/react/docs/optimizing-performance.html