Comprender cómo React Native representa los componentes es esencial para crear aplicaciones eficientes y de alto rendimiento. Cuando el estado o los accesorios de un componente cambian, React actualiza automáticamente la interfaz de usuario (UI) para reflejar esos cambios. Como resultado, React llama nuevamente al método de renderizado del componente para generar la representación de UI actualizada.
En este artículo, exploraremos tres React Hooks y cómo evitan renderizaciones innecesarias en React
Estas herramientas nos permiten optimizar nuestro código evitando re-renderizaciones innecesarias, mejorando el rendimiento y almacenando valores de manera eficiente.
Al final de este artículo, comprenderemos mejor cómo hacer que nuestras aplicaciones React sean más rápidas y con mayor capacidad de respuesta utilizando estos prácticos ganchos de React.
En React, useMemo puede evitar re-renderizaciones innecesarias y optimizar el rendimiento.
Exploremos cómo el gancho useMemo puede evitar renderizaciones innecesarias en nuestros componentes de React.
Al memorizar el resultado de una función y rastrear sus dependencias, useMemo garantiza que el proceso se vuelva a calcular solo cuando sea necesario.
Considere el siguiente ejemplo:
import { useMemo, useState } from 'react'; function Page() { const [count, setCount] = useState(0); const [items] = useState(generateItems(300)); const selectedItem = useMemo(() => items.find((item) => item.id === count), [ count, items, ]); function generateItems(count) { const items = []; for (let i = 0; iCount: {count}
Selected Item: {selectedItem?.id}
); } export default Page;
El código anterior es un componente de React llamado Page que usa useMemo para optimizar el cálculo del elemento seleccionado.
Aquí está la explicación:
El uso de useMemo optimiza el rendimiento al memorizar el resultado de la operación items.find. Garantiza que el cálculo del elemento seleccionado solo se realice cuando las dependencias (recuento o elementos) cambien, evitando nuevos cálculos innecesarios en renderizaciones posteriores.
La memorización debe emplearse de forma selectiva para operaciones computacionales intensivas, ya que introduce una sobrecarga adicional en el proceso de renderizado.
El gancho useCallback en React permite memorizar funciones, evitando que se vuelvan a crear durante la renderización de cada componente. Utilizando useCallback. una pieza se crea solo una vez y se reutiliza en renderizados posteriores siempre que sus dependencias permanezcan sin cambios.
Considere el siguiente ejemplo:
import React, { useState, useCallback, memo } from 'react'; const allColors = ['red', 'green', 'blue', 'yellow', 'orange']; const shuffle = (array) => { const shuffledArray = [...array]; for (let i = shuffledArray.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i 1)); [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]]; } return shuffledArray; }; const Filter = memo(({ onChange }) => { console.log('Filter rendered!'); return ( onChange(e.target.value)} /> ); }); function Page() { const [colors, setColors] = useState(allColors); console.log(colors[0]) const handleFilter = useCallback((text) => { const filteredColors = allColors.filter((color) => color.includes(text.toLowerCase()) ); setColors(filteredColors); }, [colors]); return (); } export default Page;{colors.map((color) => (
- {color}
))}
El código anterior demuestra una funcionalidad simple de filtrado y reproducción aleatoria de colores en un componente de React. Repasémoslo paso a paso:
El gancho useCallback se usa para memorizar la función handleFilter, lo que significa que la función solo se crea una vez y se reutiliza en renderizaciones posteriores si las dependencias (en este caso, el estado de los colores) siguen siendo las mismas.
Esta optimización evita reproducciones innecesarias de componentes secundarios que reciben la función handleFilter como accesorio, como el componente Filter.
Garantiza que el componente Filtro no se vuelva a representar si el estado de los colores no ha cambiado, lo que mejora el rendimiento.
Otro enfoque para mejorar el rendimiento en las aplicaciones React y evitar re-renderizaciones innecesarias es usar el gancho useRef. Usando useRef, podemos almacenar un valor mutable que persiste en todos los renderizados, evitando de manera efectiva rerenderizaciones innecesarias.
Esta técnica nos permite mantener una referencia a un valor sin activar actualizaciones de componentes cuando ese valor cambia. Al aprovechar la mutabilidad de la referencia, podemos optimizar el rendimiento en escenarios específicos.
Considere el siguiente ejemplo:
import React, { useRef, useState } from 'react'; function App() { const [name, setName] = useState(''); const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return (setName(e.target.value)} ref={inputRef} />); }
El ejemplo anterior tiene un campo de entrada simple y un botón. El gancho useRef crea una referencia llamada inputRef. Tan pronto como se hace clic en el botón, se llama a la función handleClick, que se centra en el elemento de entrada accediendo a la propiedad actual del objeto inputRef ref. Como tal, evita la repetición innecesaria del componente cuando cambia el valor de entrada.
Para garantizar un uso óptimo de useRef, resérvelo únicamente para valores mutables que no afecten la representación del componente. Si un valor mutable influye en la representación del componente, debe almacenarse dentro de su estado.
A lo largo de este tutorial, exploramos el concepto de renderizado de React y su impacto potencial en el rendimiento de nuestras aplicaciones. Profundizamos en las técnicas de optimización que pueden ayudar a mitigar las reproducciones innecesarias. React ofrece una variedad de ganchos que nos permiten mejorar el rendimiento de nuestras aplicaciones. Podemos almacenar valores y funciones de manera efectiva entre renderizados aprovechando estos ganchos, lo que aumenta significativamente el rendimiento de la aplicación React.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3