El hook useMemo se usa para memorizar el valor devuelto por una función “pesada”, y solo recalcularlo si las dependencias cambian. Ayuda a evitar cálculos innecesarios y mejorar el rendimiento en componentes que se renderizan muchas veces.
useMemoAcontinuación, te muestro la sintaxis básica del hook useMemo:
const valorMemorizado = useMemo(() => {
return funcionPesada();
}, [dependencias]); funcionPesada: Función que realiza un cálculo costoso.dependencias: Array de dependencias que determina cuándo se debe volver a calcular el valor memorizado.
Si alguna de las dependencias cambia, se recalcula el valor.valorMemorizado: Valor devuelto por la función, que se mantendrá en memoria hasta que cambien las dependencias.Para ilustrar el uso de useMemo, aquí tienes un ejemplo sencillo:
import React, { useState, useMemo } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
const App = () => {
const [contador, setContador] = useState(0);
const [otroContador, setOtroContador] = useState(0);
const doble = useMemo(() => {
console.log('Calculando doble...');
return contador * 2;
}, [contador]);
return (
<View style={styles.container}>
<Text style={styles.text}>Contador: {contador}</Text>
<Text style={styles.text}>Doble: {doble}</Text>
<View style={styles.buttonContainer}>
<Button title="Incrementar Contador" onPress={() => setContador(contador + 1)} color="#4CAF50" />
</View>
<View style={styles.buttonContainer}>
<Button title="Incrementar Otro Contador" onPress={() => setOtroContador(otroContador + 1)} color="#2196F3" />
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
backgroundColor: '#f0f0f0',
},
text: {
fontSize: 18,
marginBottom: 10,
fontWeight: '600',
},
buttonContainer: {
marginVertical: 10,
width: '80%',
},
});
export default App; A continuación, se muestra como usar useMemo en un componente para memorizar el resultado del cálculo del doble del contador, evitando recalcularlo si el valor no cambia. Se muestran dos botones: uno incrementa el contador (afecta al doble) y otro incrementa un contador independiente.
Aunque se renderice el componente muchas veces, el cálculo del doble solo se ejecuta cuando contador cambia. Ideal para operaciones costosas o datos derivados.
useMemo en todo “por si acaso”, puede volverse contraproducente.Este fragmento de código ilustra el uso de useMemo para filtrar y memorizar una lista de usuarios activos, evitando cálculos innecesarios en cada render. Luego muestra esa lista usando FlatList con estilos simples en React Native.
Si aún tienes dudas sobre cómo trabajar con el hook useEffect, te recomiendo revisar el recurso adicional Ejemplos de Hooks, donde encontrarás ejemplos prácticos que te ayudarán a dominarlo correctamente.