⊗jsrtPmHkURf 12 of 47 menu

Hook useRef per lavorare con i ref in React

In questa lezione lavoreremo con i ref. Per chiarezza, analizziamo il funzionamento dell'hook useRef confrontandolo con l'hook useState.

Creiamo un componente con un pulsante:

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

Importiamo useState nel componente:

import { useState } from 'react';

E creiamo lo state state:

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

Ora facciamo in modo che al click del pulsante il nostro state aumenti di 1. Visualizzeremo il valore dello state direttamente nel testo del pulsante:

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

Descriviamo la funzione per gestire il click sul pulsante handleStateClick:

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

Clicchiamo più volte il pulsante e vedremo come il valore dello state aumenta.

Ora creiamo il componente App, ma utilizzando non lo state, ma un ref.

Per iniziare, importiamo nel componente useRef:

import { useRef } from 'react';

E creiamo il ref ref. L'hook useRef restituisce come risultato un oggetto ref con un'unica proprietà current, che sarà quella che ci interesserà in seguito. Impostiamo il suo valore iniziale a 0:

const ref = useRef(0);

Aggiungiamo al pulsante il gestore del click. Ricorda che dobbiamo leggere/modificare non il ref stesso, ma la sua proprietà current:

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

Aggiungiamo la funzione per gestire il click sul nostro pulsante. Qui aumenteremo current di 1, come nell'esempio precedente con lo state. A differenza dello state, dove è richiesta la funzione setState per modificare il suo valore, con la proprietà del ref lavoriamo direttamente:

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

Ora clicchiamo il nostro pulsante. E cosa vediamo? Al click su di esso, il valore rimane 0 come inizialmente, e non cambia.

Potreste ovviamente iniziare a dubitare che il valore cambi effettivamente. Controlliamolo. Per farlo, aggiungiamo un'altra riga di codice nella funzione del gestore del click per visualizzare il valore di current in console:

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

Ora, aprendo la console nel browser, clicchiamo di nuovo sul pulsante e verifichiamo che il valore cambi effettivamente ad ogni click e che non ci siano inganni.

Ora vediamo che, a differenza dello state, la modifica del valore del ref non causa il rendering del componente. Pertanto ogni volta nel testo del pulsante vediamo il valore iniziale 0.

Pertanto, se i vostri dati sono utilizzati per il rendering, conservateli nello state, mentre se non avete bisogno del rendering, in tal caso l'utilizzo dei ref può risultare più efficiente.

Supponiamo che nel tuo componente ci sia un paragrafo con il testo 'text' e un pulsante. Fai in modo che ogni volta che si clicca sul pulsante alla fine del testo del paragrafo venga aggiunto un punto esclamativo. Fallo utilizzando lo state.

Crea un componente App, ma invece dello state usa ora un ref. Verifica che alla pressione del pulsante il testo del paragrafo non cambi. Aggiungi anche l'output del testo del paragrafo in console, aprila e verifica che in realtà il testo stia cambiando.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta