⊗jsrtPmHkURf 12 of 47 menu

Hook-ul useRef pentru lucrul cu ref-uri în React

În această lecție vom lucra cu ref-uri. Pentru claritate, să analizăm funcționarea hook-ului useRef în comparație cu hook-ul useState.

Să creăm un component cu un buton:

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

Să importăm useState în component:

import { useState } from 'react';

Și să creăm state-ul state:

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

Acum să facem ca la click pe buton, state-ul nostru să crească cu 1. Vom afișa valoarea state-ului direct în textul butonului:

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

Să descriem funcția pentru procesarea click-ului pe butonul handleStateClick:

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

Să apăsăm butonul și vom vedea cum crește valoarea state-ului.

Acum să creăm componentul App, dar folosind nu state, ci un ref.

Pentru început, să importăm în component useRef:

import { useRef } from 'react';

Și să creăm ref-ul ref. Hook-ul useRef returnează un obiect ref cu o singură proprietate current, care ne va interesa în continuare. Să stabilim valoarea sa inițială la 0:

const ref = useRef(0);

Să atașăm butonului handler-ul click-ului. Amintiți-vă că trebuie să citim/să modificăm nu ref-ul în sine, ci proprietatea sa current:

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

Să adăugăm funcția pentru procesarea click-ului pe butonul nostru. Aici vom crește current cu 1, ca și în exemplul anterior cu state-ul. Spre deosebire de state, unde este necesară funcția setState pentru a-i modifica valoarea, cu proprietatea ref-ului lucrăm direct:

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

Acum să apăsăm butonul nostru. Și ce vedem? La click pe el, cum am avut inițial 0, așa rămâne și nu se schimbă.

Desigur, ați putea începe să vă îndoiți că valoarea se schimbă deloc. Să verificăm asta. Pentru aceasta, în funcția handler-ului de click să adăugăm încă un rând de cod cu afișarea valorii current în consolă:

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

Acum, deschizând consola în browser, să apăsăm din nou butonul și vom fi convinși că valoarea chiar se schimbă la fiecare click și nu există nici o înșelătorie.

Acum vedem că, spre deosebire de state, modificarea valorii ref-ului nu provoacă re-randarea componentului. De aceea, de fiecare dată în textul butonului vedem valoarea inițială 0.

Astfel, dacă datele dvs. sunt folosite pentru randare, atunci stocați-le în state, iar dacă nu aveți nevoie de randare, în acest caz, utilizarea ref-urilor poate fi mai eficientă.

Să presupunem că în componentul dvs. există un paragraf cu textul 'text' și un buton. Faceți astfel încât de fiecare dată când se dă click pe buton la sfârșitul textului paragrafului să se adauge un semn de exclamare. Realizați acest lucru cu ajutorul state-ului.

Creați un component App, dar în loc de state folosiți acum un ref. Asigurați-vă că atunci când se apasă butonul, textul paragrafului nu se va schimba. Adăugați și afișarea textului paragrafului în consolă, deschideți-o și asigurați-vă că de fapt textul se schimbă.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge