En esta edición de GitHub, esencialmente propuse cambiar:
x = useCallback( ... , []);
A:
x = useRef( ... ).current;
Los dos son iguales pero con useRefReact no compara las dependencias.
Para lo cual llegó una respuesta con una pregunta:
¿Hay alguna situación en la que una useMemo o useCallback sin dependencia sea una mejor opción que useRef?
No puedo pensar en uno, pero puedo haber pasado por alto algunos casos de uso.
Entonces, ¿alguien puede pensar en tal situación?

useCallback(x,[])auseRef(x)funciona igual.useRef(x).currentes decir.useCallback(cb, [])vsuseRef(cb).currentmí mismo. Aunque,useMemo(cb, [])es diferenteuseRef(cb).currenten un sentido queuseMemo, "solo volverá a calcular el valor memorizado cuando una de las dependencias haya cambiado". VersususeRefque siempre vuelve a calcular el valor pase lo que pase.useRefnunca vuelve a calcular: siempre devuelve el valor inicial.Si bien puede usar useRef para emular useCallback o con una dependencia vacía, no puede usarlo para todos los escenarios posibles de useCallback que es para conmemorar cuando alguna de las dependencias cambia.
Además, no hará una gran diferencia de rendimiento si usa
useCallback with empty dependencyo usa Ref, ya que no tiene que realizar ninguna comparación pesada.Además, si cambia un poco la implementación de la función para tener que volver a crearla en un cambio de parámetro en particular, simplemente puede actualizar la implementación
useCallbacky agregar el parámetro adicional como dependencia. Sin embargo, si lo implementa con useRef, debe volver auseCallbackfuente
Porque la salida de useRef (() => {...}). Current es mutable.
Lo que puede causar efectos secundarios extraños en su código. Puedo cambiar el valor de la corriente en cualquier momento. https://codesandbox.io/s/confident-monad-vjeuw
Ese sería el caso de uso para no querer usar useRef
fuente
x = useRef(value).currentnunca devuelve una instancia mutable;refnunca se devuelve;currentes. Eso es lo mismo que con lauseCallbackversión.