⊗jsrtPmHkURf 12 of 47 menu

Huko useRef naudojimas ref'ams React'e

Šioje pamokoje dirbsime su ref'ais. Kad būtų aiškiau, palyginkime huko useRef veikimą su huku useState.

Sukurkime komponentą su mygtuku:

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

Importuokime į komponentą useState:

import { useState } from 'react';

Ir sukurkime state'ą state:

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

Dabar padarykime taip, kad paspaudus mygtuką mūsų state padidėtų vienetu 1. State'o reikšmę atvaizduosime tiesiogiai mygtuko tekste:

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

Aprašykime funkciją mygtuko paspaudimo apdorojimui handleStateClick:

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

Paspaudinėkime mygtuką ir pamatysime, kaip auga state'o reikšmė.

Dabar sukurkime komponentą App, bet naudodami ne state'ą, o ref'ą.

Pirmiausia, importuokime į komponentą useRef:

import { useRef } from 'react';

Ir sukurkime ref'ą ref. Hukas useRef grąžina ref'o objektą su viena savybe current, kuri mūsų ir bus dominti toliau. Nustatykime jo pradinę reikšmę į 0:

const ref = useRef(0);

Uždėkime ant mygtuko paspaudimo apdorojimą. Atminkite, kad mes turime skaityti/keisti ne patį ref, o jo savybę current:

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

Pridėkime funkciją mūsų mygtuko paspaudimo apdorojimui. Čia mes padidinsime current vienetu 1, kaip ir ankstesniame pavyzdyje su state'u. Skirtingai nuo state'o, kur reikalinga funkcija setState jo reikšmei pakeisti, su ref'o savybe mes dirbame tiesiogiai:

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

Dabar paspaudinėkime mūsų mygtuką. Ir ką gi matome? Spaudžiant jį, kaip ir buvo iš pradžių 0, taip ir nebesikeičia.

Jūs, žinoma, galite pradėti abejoti, ar reikšmė apskritai keičiasi. Patikrinkime tai. Tam funkcijoje mygtuko paspaudimo apdorojimo pridėkime dar vieną kodo eilutę su current reikšmės išvedimu į konsolę:

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

Dabar, atsidarę naršyklės konsolę, vėl paspauskime mygtuką ir įsitikinsime, kad reikšmė tikrai keičiasi su kiekvienu paspaudimu ir apgaulės nėra.

Dabar matome, kad skirtingai nuo state'o, ref'o reikšmės pakeitimas nesukelia komponento pervaizdavimo. Todėl mes kiekvieną kartą mygtuko tekste matome pradinę reikšmę 0.

Taigi, jei jūsų duomenys naudojami pervaizdavimui, laikykite juos state'e, o jei pervaizdavimo nereikia, tokiu atveju ref'ų naudojimas gali būti efektyvesnis.

Tegul jūsų komponente yra pastraipa su tekstu 'text' ir mygtukas. Padarykite taip, kad kiekvieną kartą paspaudus mygtuką į pastraipos teksto pabaigą būtų pridedamas šauktukas. Padarykite tai naudodami state'ą.

Sukurkite komponentą App, bet vietoj state'o dabar naudokite ref'ą. Įsitikinkite, kad paspaudus mygtuką pastraipos tekstas nebus keičiamas. Taip pat pridėkite pastraipos teksto atvaizdavimą konsolėje, atsidarykite ją ir įsitikinkite, kad iš tikrųjų tekstas keičiasi.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti