Estaba revisando useEffect de los documentos de reactjs y encontré esta declaración aquí
Los desarrolladores de JavaScript experimentados pueden notar que la función que se pasa a useEffect va a ser diferente en cada renderizado.
Estamos pasando una función a useEffect y se dice que esta función es diferente para cada renderizado. useEffect tiene acceso al estado y accesorios ya que está dentro del componente de la función y cuando cualquiera de estos cambios, podemos ver ese cambio en la función de useEffect (debido al cierre), ¿verdad? Esto no está claro, porque en la siguiente línea el documento dice
Esto es intencional. De hecho, esto es lo que nos permite leer el valor de conteo desde dentro del efecto sin preocuparnos de que se vuelva obsoleto.
Para contrarrestar esto, supongamos que tenemos una función
function foo(n) { bar = () => { setTimeout(() => console.log({n}), 50); return n; } setTimeout(() => {n = 10}, 0); setTimeout(() => {n = 20}, 100); setTimeout(() => {n = 30}, 150); return bar; } baz = foo(1); baz(); //prints 10 setTimeout(baz, 300); //prints 30Parece que cuando se cambia el valor de cierre (n), podemos ver ese cambio en la devolución de llamada de setTimeout (y esta devolución de llamada no cambia con el tiempo). Entonces, ¿cómo puede el valor cerrado (estado/accesorios) en la función de useEffect volverse obsoleto como se menciona en los documentos?
¿Me estoy perdiendo de algo? Creo que es más una pregunta de JS en comparación con React, así que tomé un ejemplo de JS.