El funcionario Reaccionar documentos afirman que " React.PureComponent
's shouldComponentUpdate()
única superficialmente compara los objetos", y aconseja en contra de este estado si es 'profunda'.
Dado esto, ¿hay alguna razón por la que uno prefiera React.PureComponent
al crear componentes React?
Preguntas :
- ¿Hay algún impacto en el rendimiento en el uso
React.Component
que podamos considerarReact.PureComponent
? - Estoy adivinando
shouldComponentUpdate()
dePureComponent
sólo realiza comparaciones superficiales. Si este es el caso, ¿no se puede usar dicho método para realizar comparaciones más profundas? - "Por otra parte,
React.PureComponent
'sshouldComponentUpdate()
saltos apuntalar actualizaciones para todo el subárbol componente" - ¿Quiere esto decir que los cambios se ignoran prop?
La pregunta surgió de la lectura en este blog medio , si es útil.
Respuestas:
La principal diferencia entre
React.PureComponent
yReact.Component
esPureComponent
una comparación superficial sobre el cambio de estado. Significa que cuando compara valores escalares, compara sus valores, pero cuando compara objetos solo compara referencias. Ayuda a mejorar el rendimiento de la aplicación.Debes ir
React.PureComponent
cuando puedas cumplir cualquiera de las siguientes condiciones.forceUpdate
cuando los datos cambienSi está utilizando
React.PureComponent
, debe asegurarse de que todos los componentes secundarios también sean puros.Sí, aumentará el rendimiento de su aplicación (debido a la comparación superficial)
Lo has adivinado correctamente. Puede usarlo si cumple con alguna de las condiciones que mencioné anteriormente.
Sí, los cambios de utilería serán ignorados si no puede encontrar la diferencia en la comparación superficial.
fuente
It means that when comparing scalar values it compares their values, but when comparing objects it compares only references. It helps to improve the performance of the app.
:? GraciasState/Props should not have a hierarchy
lo siento, ¿puedes explicar un poco qué significa la jerarquía aquí?Component
yPureComponent
tiene una diferenciaPureComponent
es exactamente lo mismo,Component
excepto que maneja elshouldComponentUpdate
método por usted.Cuando los accesorios o el estado cambien,
PureComponent
se realizará una comparación superficial tanto en los accesorios como en el estado.Component
Por otro lado, no comparará los accesorios actuales y el estado con el siguiente fuera de la caja. Por lo tanto, el componente se volverá a representar de forma predeterminada siempre queshouldComponentUpdate
se llame.Comparación superficial
Al comparar accesorios y estado anteriores con el siguiente, una comparación superficial comprobará que las primitivas tienen el mismo valor (por ejemplo, 1 es igual a 1 o que verdadero es igual a verdadero) y que las referencias son las mismas entre valores de JavaScript más complejos como objetos y matrices.
Fuente: https://codeburst.io/when-to-use-component-or-purecomponent-a60cfad01a81
fuente
La principal diferencia, según lo veo, es que un componente se retrae cada vez que su padre se retrae, independientemente de si los accesorios y el estado del componente han cambiado.
Un componente puro, por otro lado, no volverá a rendirse si su padre se vuelve a rendir, a menos que los accesorios (o estado) del componente puro hayan cambiado.
Por ejemplo, supongamos que tenemos un árbol de componentes con una jerarquía de tres niveles: padres, hijos y nietos.
Cuando los accesorios de los padres se cambian de una manera que se cambian los accesorios de un solo hijo, entonces:
A veces, sin embargo, el uso de componentes puros no tendrá ningún impacto. Tuve un caso así cuando el padre recibió sus accesorios de una tienda redux y necesitaba realizar un cálculo complejo de los accesorios de sus hijos. El padre usó una lista plana para representar a sus hijos.
El resultado fue que cada vez que hubo un pequeño cambio en la tienda redux, se recalculó toda la matriz de la lista plana de los datos de los niños. Esto significaba que para cada componente del árbol, los accesorios eran objetos nuevos, incluso si los valores no cambiaban.
En este caso, los componentes puros no ayudan, y el aumento del rendimiento solo se puede lograr mediante el uso de componentes regulares y la verificación de los elementos secundarios, en shouldComponentUpdate, si es necesario volver a generar.
fuente