⊗jsrtPmHkURf 12 of 47 menu

Hook useRef pre prácu s refami v Reacte

V tejto lekcii budeme pracovať s refami. Pre názornosť si rozoberme fungovanie hooku useRef v porovnaní s hookom useState.

Vytvorme komponent s tlačidlom:

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

Importujme do komponentu useState:

import { useState } from 'react';

A vytvorme state state:

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

A teraz urobme tak, aby pri kliknutí na tlačidlo sa náš state zvýšil o 1. Hodnotu state budeme vypisovať priamo do textu tlačidla:

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

Opíšme funkciu pre spracovanie kliknutia na tlačidlo handleStateClick:

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

Klikajme na tlačidlo a uvidíme, ako rastie hodnota state.

A teraz vytvorme komponent App, ale použime nie state, ale ref.

Na začiatok importujme do komponentu useRef:

import { useRef } from 'react';

A vytvorme ref ref. Hook useRef ako výsledok vracia objekt refu s jedinou vlastnosťou current, ktorá nás bude zaujímať v ďalšom. Nastavme jeho počiatočnú hodnotu na 0:

const ref = useRef(0);

Nastavme na tlačidlo spracovateľ kliknutia. Pamätajte, že musíme čítať/meniť nie samotný ref, ale jeho vlastnosť current:

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

Pridajme funkciu pre spracovanie kliknutia na naše tlačidlo. Tu budeme zvyšovať current o 1, ako v predchádzajúcom príklade so state. Na rozdiel od state, kde je potrebná funkcia setState na zmenu jeho hodnoty, s vlastnosťou refu pracujeme priamo:

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

Teraz klikajme na naše tlačidlo. A čo vidíme? Pri kliknutí naň, ako sme mali pôvodne 0, tak sa to ani nemení.

Vy, samozrejme, môžete začať pochybovať o tom, že sa hodnota vôbec mení. Overme si to. Preto do funkcie spracovateľa kliknutia pridajme ešte riadok kódu s výpisom hodnoty current do konzoly:

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

A teraz, otvoríme konzolu v prehliadači, znova klikajme na tlačidlo a presvedčíme sa, že hodnota sa naozaj mení pri každom kliknutí a žiadny podvod nie je.

Teraz vidíme, že na rozdiel od state, zmena hodnoty refu nespôsobuje renderovanie komponentu. Preto sme každý krát v texte tlačidla videli počiatočnú hodnotu 0.

Takže, ak sa vaše údaje používajú na renderovanie, tak ich uchovávajte v state, a ak nepotrebujete renderovanie, v takom prípade použitie refov môže byť efektívnejšie.

Nech vo vašom komponente je odsek s textom 'text' a tlačidlo. Urobte tak, aby každý krát pri kliknutí na tlačidlo na koniec textu odseku sa pridala výkričník. Urobte to pomocou state.

Vytvorte komponent App, ale namiesto state teraz použite ref. Presvedčte sa, že pri stlačení tlačidla text odseku sa nebude meniť. Pridajte tiež výpis textu odseku do konzoly, otvorte ju a presvedčte sa, že v skutočnosti sa text mení.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť