⊗jsrtPmHkURf 12 of 47 menu

Hook useRef para trabalhar com refs no React

Nesta lição, vamos trabalhar com refs. Para maior clareza, vamos analisar o funcionamento do hook useRef em comparação com o hook useState.

Vamos criar um componente com um botão:

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

Vamos importar useState para o componente:

import { useState } from 'react';

E vamos criar um estado state:

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

Agora, vamos fazer com que ao clicar no botão, nosso state aumente em 1. Vamos exibir o valor do estado diretamente no texto do botão:

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

Vamos descrever a função para lidar com o clique no botão handleStateClick:

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

Vamos clicar no botão e ver como o valor do estado aumenta.

Agora, vamos criar o componente App, mas usando não o estado, mas uma ref.

Primeiro, vamos importar useRef para o componente:

import { useRef } from 'react';

E vamos criar uma ref ref. O resultado do hook useRef retorna um objeto de ref com uma única propriedade current, que é a que nos interessará no futuro. Vamos definir seu valor inicial como 0:

const ref = useRef(0);

Vamos adicionar um manipulador de clique ao botão. Lembre-se de que devemos ler/alterar não a ref em si, mas sua propriedade current:

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

Vamos adicionar a função para lidar com o clique no nosso botão. Aqui, vamos aumentar current em 1, como no exemplo anterior com o estado. Diferente do estado, que requer a função setState para alterar seu valor, trabalhamos diretamente com a propriedade da ref:

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

Agora, vamos clicar no nosso botão. E o que vemos? Ao clicar nele, o valor que era inicialmente 0 não muda.

Você pode começar a duvidar se o valor realmente muda. Vamos verificar isso. Para isso, na função do manipulador de clique, vamos adicionar mais uma linha de código para exibir o valor de current no console:

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

Agora, abrindo o console no navegador, vamos clicar no botão novamente e confirmar que o valor realmente muda a cada clique e não há engano.

Agora vemos que, diferentemente do estado, a alteração do valor da ref não causa a re-renderização do componente. Por isso, a cada vez vemos o valor inicial 0 no texto do botão.

Assim, se seus dados são usados para renderização, armazene-os no estado, e se você não precisa de re-renderização, neste caso, o uso de refs pode ser mais eficiente.

Suponha que no seu componente haja um parágrafo com o texto 'text' e um botão. Faça com que a cada clique no botão um ponto de exclamação seja adicionado ao final do texto do parágrafo. Faça isso usando o estado.

Crie um componente App, mas em vez do estado agora use uma ref. Certifique-se de que quando o botão for pressionado, o texto do parágrafo não mudará. Adicione também a saída do texto do parágrafo no console, abra-o e certifique-se de que o texto realmente muda.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar