Hola, solo por curiosidad se puede usar useMemo
lugar de useRef
al hacerlo de la siguiente manera:
Ejemplo:
const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);
Me parece que ambas referencias funcionarán bien como referencia DOM y como valor mutable similar a los campos de instancia en las clases. ¿Por qué entonces useRef
se implementa de manera diferente en comparación con useMemo
considerando el código ReactFiberHooks.js para useRef
y useMemo
?
¡Gracias!
Podría crear un objeto de referencia de esta manera, pero sería menos eficiente ya que useMemo
también rastrea y compara dependencias. (Incluso si especifica una matriz de dependencia vacía, la estructura de datos subyacente para un gancho memo tiene espacio para el valor adicional).
Para ilustrar esto, puede comparar la implementación de useRef
:
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920
Hasta useMemo
:
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156
Dado que ambos ganchos se utilizan con frecuencia, es importante que funcionen de manera óptima: sonrisa: por lo que se implementan de manera diferente.
_Podría_ crear un objeto de referencia de esta manera, pero sería menos eficiente ya que
useMemo
también rastrea y compara dependencias. (Incluso si especifica una matriz de dependencia vacía, la estructura de datos subyacente para un gancho memo tiene espacio para el valor adicional).Para ilustrar esto, puede comparar la implementación de
useRef
:
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920Hasta
useMemo
:
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156Dado que ambos ganchos se usan con frecuencia, es importante que funcionen de manera óptima, por lo que se implementan de manera diferente.
hola, ¿cómo formatear el código así?
@ yaofly2012 GitHub formatea enlaces de esa manera, si se enlaza a una revisión de archivo y números de línea específicos.
Comentario más útil
Podría crear un objeto de referencia de esta manera, pero sería menos eficiente ya que
useMemo
también rastrea y compara dependencias. (Incluso si especifica una matriz de dependencia vacía, la estructura de datos subyacente para un gancho memo tiene espacio para el valor adicional).Para ilustrar esto, puede comparar la implementación de
useRef
:https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920
Hasta
useMemo
:https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156
Dado que ambos ganchos se utilizan con frecuencia, es importante que funcionen de manera óptima: sonrisa: por lo que se implementan de manera diferente.