⊗jsrtPmHkURf 12 of 47 menu

Hook useRef para trabajar con refs en React

En esta lección trabajaremos con refs. Para mayor claridad, analicemos el funcionamiento del hook useRef en comparación con el hook useState.

Creemos un componente con un botón:

return ( <div> <button> state click </button> </div> );

Importemos useState al componente:

import { useState } from 'react';

Y creemos el estado state:

const [state, setState] = useState(0);

Y ahora hagamos que al hacer clic en el botón nuestro state aumente en 1. Mostraremos el valor del estado directamente en el texto del botón:

<button onClick={handleStateClick}> state click: {state} </button>

Describamos la función para manejar el clic en el botón handleStateClick:

function handleStateClick() { setState(state + 1); }

Hagamos clic en el botón y veamos cómo aumenta el valor del estado.

Y ahora creemos el componente App, pero usando no el estado, sino una ref.

Primero, importemos useRef al componente:

import { useRef } from 'react';

Y creemos la ref ref. El resultado del hook useRef devuelve un objeto de ref con una única propiedad current, que será la que nos interese en el futuro. Establezcamos su valor inicial en 0:

const ref = useRef(0);

Agreguemos un manejador de clic al botón. Recuerda que debemos leer/modificar no la ref en sí, sino su propiedad current:

<button onClick={handleRefClick}> ref click: {ref.current} </button>

Añadamos la función para manejar el clic en nuestro botón. Aquí aumentaremos current en 1, como en el ejemplo anterior con el estado. A diferencia del estado, donde se requiere la función setState para cambiar su valor, con la propiedad de la ref trabajamos directamente:

function handleRefClick() { ref.current = ref.current + 1; }

Ahora hagamos clic en nuestro botón. ¿Y qué vemos? Al hacer clic en él, el valor que inicialmente era 0, no cambia.

Por supuesto, podrías empezar a dudar de que el valor realmente esté cambiando. Comprobémoslo. Para ello, en la función del manejador de clic añadamos una línea más de código para mostrar el valor de current en la consola:

function handleRefClick() { ref.current = ref.current + 1; console.log('ref click: ' + ref.current); }

Y ahora, abriendo la consola en el navegador, hagamos clic en el botón nuevamente y asegurémonos de que el valor realmente cambia con cada clic y no hay ningún engaño.

Ahora vemos que, a diferencia del estado, el cambio del valor de la ref no provoca una rerenderización del componente. Por eso cada vez en el texto del botón vemos el valor inicial 0.

Por lo tanto, si tus datos se utilizan para el renderizado, guárdalos en el estado, y si no necesitas el renderizado, en ese caso, el uso de refs puede ser más eficiente.

Supongamos que en tu componente hay un párrafo con el texto 'text' y un botón. Haz que cada vez que se haga clic en el botón se añada un signo de exclamación al final del texto del párrafo. Hazlo usando el estado.

Crea un componente App, pero en lugar del estado ahora usa una ref. Asegúrate de que al presionar el botón el texto del párrafo no cambie. Añade también la salida del texto del párrafo a la consola, ábrela y asegúrate de que en realidad el texto sí cambia.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar