Optimización del Rendimiento con el Hook useMemo
El hook useMemo nos permite memorizar el resultado de una función, optimizando cálculos costosos mediante el almacenamiento en caché del resultado. Es ventajoso cuando se realizan cálculos frecuentes e intensivos en recursos que producen el mismo resultado si los datos no cambian. Esto elimina la necesidad de recalcular de forma redundante, lo que resulta en un mejor rendimiento.
Sintaxis:
Se declara una nueva variable, como cachedValue, y se le asigna el hook useMemo. Dentro de los paréntesis del hook, se proporciona una función (por ejemplo, calculateValue), que se ejecutará para calcular el valor memorizado. Esta función puede ser cualquier función válida de JavaScript. Además, se incluye un segundo argumento—un array llamado dependencies—que consiste en los valores de los que depende el valor memorizado.
const cachedValue = useMemo(calculateValue, dependencies)
Cuando alguna de las dependencias especificadas en el array dependencies cambia, el valor memorizado se volverá a calcular. Sin embargo, si las dependencias permanecen iguales entre renderizados, React devolverá el valor previamente calculado sin volver a calcularlo.
Nota
Esta optimización ayuda a mejorar el rendimiento al evitar cálculos innecesarios y resulta en una experiencia de usuario más eficiente.
Ejemplo 1
Creemos el componente ShoppingCart, que almacenará la información sobre la cantidad de productos que el usuario selecciona. Además, gestionará la lógica para calcular la suma total, indicando el monto que el usuario debe pagar. Nuestro objetivo principal es memorizar la suma total y recalcularla solo cuando el usuario modifique la prop products que se pasa a este componente.
import React, { useMemo } from "react";
const ShoppingCart = ({ products }) => {
const totalPrice = useMemo(() => {
let sum = 0;
for (const item of products) {
sum += item.price * item.quantity;
}
return sum;
}, [products]);
return (
<div>
<h2>Shopping Cart</h2>
<ul>
{products.map(({ id, name, price, quantity }) => (
<li key={id}>
<p>
<span>{name} -</span>
<span>
${price} x {quantity}
</span>
</p>
</li>
))}
</ul>
<h3>
Total Price: <span>${totalPrice}</span>
</h3>
</div>
);
};
El cálculo de totalPrice se realiza dentro del hook useMemo, lo que previene el recálculo innecesario en cada nueva renderización del componente.
Explicación línea por línea:
- Línea 1: Se importa el hook
useMemode la librería React para aprovechar su funcionalidad; - Línea 3: El componente
ShoppingCartse define utilizando la sintaxis convencional de función; - Líneas 4-10: Se crea la variable
totalPrice, responsable del precio total que el usuario debe pagar. Se utiliza el hookuseMemopara evitar realizar cálculos en cada renderizado;- Líneas 5-9: Dentro de la función flecha pasada a
useMemo, se implementa la lógica para calcular la suma total (sum). Se itera sobre cada elemento del arrayproducts, multiplicando el precio por la propquantityy sumándolo a la variablesum; - Línea 10: Se proporciona el array de dependencias
[products]al hookuseMemo. Esto indica que el valor memorizado debe recalcularse si el arrayproductscambia.
- Líneas 5-9: Dentro de la función flecha pasada a
- Líneas 12-31: Se renderiza el marcado del componente.
- Línea 16: Se utiliza el método
mappara renderizar cada producto en el arrayproducts, creando el elemento JSX correspondiente; - Línea 17: Se establece el atributo
keypara asegurar una renderización eficiente de los elementos del array y ayudar a React a identificar cada elemento de forma única; - Línea 28: Se renderiza el valor de la variable
totalPricedentro del JSX, mostrando el precio total calculado.
Código completo de la aplicación:
Nota
Es recomendable no mezclar los hooks
useEffectyuseMemopara garantizar claridad y evitar confusiones. La diferencia clave radica en sus respectivos propósitos:useEffectse utiliza para gestionar efectos secundarios y el ciclo de vida del componente, mientras queuseMemomemoriza cálculos costosos para mejorar el rendimiento.
1. ¿Cuál es el propósito principal del hook useMemo en React?
2. ¿Cuándo vuelve a calcular su valor memorizado el hook useMemo?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain when I should use useMemo instead of useEffect?
What are some common mistakes to avoid when using useMemo?
Can you show another example of useMemo in a different context?
Awesome!
Completion rate improved to 2.17
Optimización del Rendimiento con el Hook useMemo
Desliza para mostrar el menú
El hook useMemo nos permite memorizar el resultado de una función, optimizando cálculos costosos mediante el almacenamiento en caché del resultado. Es ventajoso cuando se realizan cálculos frecuentes e intensivos en recursos que producen el mismo resultado si los datos no cambian. Esto elimina la necesidad de recalcular de forma redundante, lo que resulta en un mejor rendimiento.
Sintaxis:
Se declara una nueva variable, como cachedValue, y se le asigna el hook useMemo. Dentro de los paréntesis del hook, se proporciona una función (por ejemplo, calculateValue), que se ejecutará para calcular el valor memorizado. Esta función puede ser cualquier función válida de JavaScript. Además, se incluye un segundo argumento—un array llamado dependencies—que consiste en los valores de los que depende el valor memorizado.
const cachedValue = useMemo(calculateValue, dependencies)
Cuando alguna de las dependencias especificadas en el array dependencies cambia, el valor memorizado se volverá a calcular. Sin embargo, si las dependencias permanecen iguales entre renderizados, React devolverá el valor previamente calculado sin volver a calcularlo.
Nota
Esta optimización ayuda a mejorar el rendimiento al evitar cálculos innecesarios y resulta en una experiencia de usuario más eficiente.
Ejemplo 1
Creemos el componente ShoppingCart, que almacenará la información sobre la cantidad de productos que el usuario selecciona. Además, gestionará la lógica para calcular la suma total, indicando el monto que el usuario debe pagar. Nuestro objetivo principal es memorizar la suma total y recalcularla solo cuando el usuario modifique la prop products que se pasa a este componente.
import React, { useMemo } from "react";
const ShoppingCart = ({ products }) => {
const totalPrice = useMemo(() => {
let sum = 0;
for (const item of products) {
sum += item.price * item.quantity;
}
return sum;
}, [products]);
return (
<div>
<h2>Shopping Cart</h2>
<ul>
{products.map(({ id, name, price, quantity }) => (
<li key={id}>
<p>
<span>{name} -</span>
<span>
${price} x {quantity}
</span>
</p>
</li>
))}
</ul>
<h3>
Total Price: <span>${totalPrice}</span>
</h3>
</div>
);
};
El cálculo de totalPrice se realiza dentro del hook useMemo, lo que previene el recálculo innecesario en cada nueva renderización del componente.
Explicación línea por línea:
- Línea 1: Se importa el hook
useMemode la librería React para aprovechar su funcionalidad; - Línea 3: El componente
ShoppingCartse define utilizando la sintaxis convencional de función; - Líneas 4-10: Se crea la variable
totalPrice, responsable del precio total que el usuario debe pagar. Se utiliza el hookuseMemopara evitar realizar cálculos en cada renderizado;- Líneas 5-9: Dentro de la función flecha pasada a
useMemo, se implementa la lógica para calcular la suma total (sum). Se itera sobre cada elemento del arrayproducts, multiplicando el precio por la propquantityy sumándolo a la variablesum; - Línea 10: Se proporciona el array de dependencias
[products]al hookuseMemo. Esto indica que el valor memorizado debe recalcularse si el arrayproductscambia.
- Líneas 5-9: Dentro de la función flecha pasada a
- Líneas 12-31: Se renderiza el marcado del componente.
- Línea 16: Se utiliza el método
mappara renderizar cada producto en el arrayproducts, creando el elemento JSX correspondiente; - Línea 17: Se establece el atributo
keypara asegurar una renderización eficiente de los elementos del array y ayudar a React a identificar cada elemento de forma única; - Línea 28: Se renderiza el valor de la variable
totalPricedentro del JSX, mostrando el precio total calculado.
Código completo de la aplicación:
Nota
Es recomendable no mezclar los hooks
useEffectyuseMemopara garantizar claridad y evitar confusiones. La diferencia clave radica en sus respectivos propósitos:useEffectse utiliza para gestionar efectos secundarios y el ciclo de vida del componente, mientras queuseMemomemoriza cálculos costosos para mejorar el rendimiento.
1. ¿Cuál es el propósito principal del hook useMemo en React?
2. ¿Cuándo vuelve a calcular su valor memorizado el hook useMemo?
¡Gracias por tus comentarios!