⊗jsrtPmHkURf 12 of 47 menu

Hook useRef pro práci s refy v Reactu

V této lekci budeme pracovat s refy. Pro názornost si rozebereme funkci hoku useRef ve srovnání s hokem useState.

Vytvořme komponentu s tlačítkem:

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

Importujme do komponenty useState:

import { useState } from 'react';

A vytvořme stav state:

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

A nyní udělejme tak, aby po kliknutí na tlačítko se náš state zvýšil o 1. Hodnotu stavu budeme vypisovat přímo do textu tlačítka:

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

Pojďme popsat funkci pro zpracování kliknutí na tlačítko handleStateClick:

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

Klikněme na tlačítko a uvidíme, jak hodnota stavu roste.

A nyní vytvořme komponentu App, ale použijme nikoli stav, ale ref.

Nejprve importujme do komponenty useRef:

import { useRef } from 'react';

A vytvořme ref ref. Hook useRef vrací jako výsledek objekt refu s jedinou vlastností current, která nás bude zajímat v dalším kroku. Nastavme jeho počáteční hodnotu na 0:

const ref = useRef(0);

Přidejme na tlačítko obslužnou rutinu kliknutí. Pamatujte, že musíme číst/měnit nikoli samotný ref, ale jeho vlastnost current:

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

Přidejme funkci pro zpracování kliknutí na naše tlačítko. Zde budeme zvyšovat current o 1, stejně jako v předchozím příkladu se stavem. Na rozdíl od stavu, kde je vyžadována funkce setState pro změnu jeho hodnoty, s vlastností refu pracujeme přímo:

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

Nyní klikněme na naše tlačítko. A co vidíme? Při kliknutí na něj, jak jsme měli původně 0, tak se nemění.

Můžete samozřejmě začít pochybovat o tom, že se hodnota vůbec mění. Pojďme to zkontrolovat. K tomu přidáme do funkce obslužné rutiny kliknutí další řádek kódu s výpisem hodnoty current do konzole:

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

A nyní, otevřeme-li konzoli v prohlížeči, znovu klikněme na tlačítko a přesvědčme se, že hodnota se skutečně mění při každém kliknutí a žádný podvod neexistuje.

Nyní vidíme, že na rozdíl od stavu, změna hodnoty refu nezpůsobuje renderování komponenty. Proto pokaždé v textu tlačítka vidíme počáteční hodnotu 0.

Pokud jsou tedy vaše data používána pro renderování, ukládejte je do stavu, a pokud nepotřebujete renderování, v takovém případě může být použití refů efektivnější.

Nechť je ve vaší komponentě odstavec s textem 'text' a tlačítko. Udělejte tak, aby pokaždé po kliknutí na tlačítko se na konec textu odstavce přidala vykřičník. Udělejte to pomocí stavu.

Vytvořte komponentu App, ale místo stavu nyní použijte ref. Přesvědčte se, že při stisknutí tlačítka se text odstavce nebude měnit. Přidejte také výpis textu odstavce do konzole, otevřete ji a přesvědčte se, že text se ve skutečnosti mění.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout