Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
useMemo vs useEffect + useState

¿Hay algún beneficio en el uso de useMemo (por ejemplo, para una llamada de función intensiva) en lugar de usar una combinación de useEffect y useState ?

Aquí hay dos ganchos personalizados que funcionan exactamente igual a primera vista, además de que el valor de retorno de useMemo es null en el primer renderizado:

Ver en CodeSandbox

useEffect y useState

 import { expensiveCalculation } from "foo"; function useCalculate(someNumber: number): number { const [result, setResult] = useState<number>(null); useEffect(() => { setResult(expensiveCalculation(someNumber)); }, [someNumber]); return result; }

useMemo

 import { expensiveCalculation } from "foo"; function useCalculateWithMemo(someNumber: number): number { return useMemo(() => { return expensiveCalculation(someNumber); }, [someNumber]); };

Ambos calculan el resultado cada vez que cambia su parámetro someNumber , ¿dónde se activa la memorización de useMemo ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

useEffect y setState generarán renderizaciones adicionales en cada cambio: la primera renderización se "retrasará" con datos obsoletos y luego pondrá inmediatamente en cola una renderización adicional con los nuevos datos.


Supongamos que tenemos:

 // Maybe I'm running this on a literal potato function expensiveCalculation(x) { return x + 1; };

Supongamos que someNumber es inicialmente 0:

  • La versión useMemo muestra inmediatamente 1 .
  • La versión useEffect renderiza null , luego, después de que el componente renderiza, el efecto se ejecuta, cambia el estado y pone en cola un nuevo renderizado con 1 .

Entonces, si cambiamos someNumber a 2:

  • El useMemo se ejecuta y se renderiza 3 .
  • La versión useEffect se ejecuta y representa 1 nuevamente, luego el efecto se activa y el componente se vuelve a ejecutar con el valor correcto de 3 .

En términos de la frecuencia con la que se ejecuta el cálculo expensiveCalculation , los dos tienen un comportamiento idéntico, pero la versión useEffect está causando el doble de procesamiento, lo que es malo para el rendimiento por otras razones.

Además, la versión useMemo es simplemente más limpia y legible, en mi opinión. No introduce un estado mutable innecesario y tiene menos partes móviles.

Así que es mejor que useMemo aquí.

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que hay dos puntos principales que debe considerar al elegir entre ellos.

  1. Hora en que se llamó a la función.

useEffect llamado después de que se haya renderizado el componente, para que pueda acceder a DOM desde él. Por ejemplo, esto es importante si desea acceder a elementos DOM a través de referencias.

  1. Garantías semánticas.

useEffect garantiza que no se activará si las dependencias no han cambiado. useMemo no ofrece tales garantías.

Como se indica en la documentación de React , debe considerar useMemo como una técnica de optimización pura. Su programa debería continuar funcionando correctamente incluso si reemplaza useMemo con una llamada de función regular.

useEffect + useState se puede usar para controlar las actualizaciones. Incluso para romper dependencias circulares y evitar bucles de actualización infinitos.

over 4 years ago · Santiago Trujillo Denunciar

0

Diría que además de la naturaleza asíncrona, podría haber alguna diferencia en términos de cómo están diseñados.

useEffect es una llamada colectiva, asíncrona o no, se recopila después de que se procesan todos los componentes.

useMemo es una llamada local, que solo tiene algo que ver con este componente. Podría pensar en useMemo como otra instrucción de asignación con beneficios para usar la asignación de la última actualización.

Esto significa que useMemo es más urgente, luego useLayoutEffect y el último useEffect .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda