Saltar al contenido principal

Referencias

useRef es un hook que devuelve un objeto ref mutable cuya propiedad current se inicializa con el valor pasado como parámetro.

El objeto devuelto se mantendrá persistente durante la vida completa del componente.

useRef no notifica cuando su contenido ha cambiado y como consecuencia no va a provocar un nuevo renderizado en los componentes.

El uso de useRef permite almacenar y mutar datos en un componente, o en un elemento del real DOM.

useRef también permite acceder a un elemento del real DOM de forma imperativa.

Combinado con el hook useEffect, es posible aplicar el foco sobre el elemento referenciado. El input está asociado a la referencia search el valor contenido en current cambiará en el momento que el input cambie.

8.6-rendering/src/components/Table/TableRowSearcher.jsx
loading...

Cuando la referencia es creada desde un componente padre y ésta debe propagarse a un componente hijo hasta llegar al elemento, debe usarse junto con el HOC forwardRef.

8.7-rendering/src/components/Table/TableRowSearcher.jsx
loading...

El este caso, el componente TableRowSearchInput recibe por propiedad la ref pero dentro del componente es el segundo parámetro de la función. No es posible acceder a la propiedad ref dentro del objetos props.

8.7-rendering/src/components/Table/TableRowSearcherInput.jsx
loading...

tip

Un caso típico de uso de referencias son en los formularios, para evitar el continuo rerendering al rellenarlo.


innerHTML

Una referencia hacia un elemento del DOM permite acceder a todos sus métodos y propiedades nativas del navegador, pero no quiere decir que su uso en todos los casos sea el correcto.

Con un elemento referenciado es posible acceder a la propiedad innerHTML e inyectar todo el HTML deseado, consiguiendo el mismo resultado que utilizando la propiedad dangerouslySetInnerHTML de React.

Mientras que la propiedad dangerouslySetInnerHTML le indica a React que todo el árbol DOM contenido dentro de esta debe ser ignorado por el algoritmo de Reconciliación, innerHTML no lo hace, provocando que el contenido se compare en cada renderizado, pero sin poder aplicar todo el sistema de optimizaciones propios de los componentes y elementos, debido a que el HTML se encuentra fuera del control de React.