⊗jsrtPmHkUTr 17 of 47 menu

Hook optimalizácie výkonu useTransition v Reacte

Hook optimalizácie výkonu useTransition nám umožňuje aktualizovať stavy bez blokovania grafického používateľského rozhrania.

Pomocou tohto hooku môžeme nastaviť aktualizácii nejakého stavu nízku prioritu, čo umožní aktualizácii iných stavov mať vysokú prioritu a vykonávať sa bez oneskorení.

Ako príklad môžeme uviesť filtrovanie rozbaľovacieho zoznamu produktov pri zadaní znakov používateľom do poľa vyhľadávania. Samozrejme, samotný zoznam sa môže zobrazovať s určitým oneskorením, ale nechceli by sme, aby sa znaky zadávali do vyhľadávacieho poľa s oneskorením.

Pozrime sa, ako nám v takýchto prípadoch môže pomôcť hook useTransition. Predpokladajme, že máme kúsok kódu hlavného komponentu. Poďme ho analyzovať:

import { useTransition } from 'react'; import { useState } from 'react'; function App() { const [isPending, startTransition] = useTransition(); const [filterTerm, setFilterTerm] = useState(''); const filteredProducts = filterProducts(filterTerm); function updateFilterHandler(event) { startTransition(() => { setFilterTerm(event.target.value); }); } return ( <div> <input type="text" onChange={updateFilterHandler} /> <ProductList products={filteredProducts} /> </div> ); }

Vidíme tu dve premenné pre useTransition. Premenná isPending obsahuje booleovskú hodnotu a ukazuje, či je proces aktualizácie ukončený, a startTransition je funkcia, ktorá umožňuje znížiť prioritu aktualizácie:

const [isPending, startTransition] = useTransition();

Máme tiež stav filterTerm, v ktorom je uložený výraz zadaný do vstupného poľa a funkcia setFilterTerm na jeho nastavenie:

const [filterTerm, setFilterTerm] = useState('');

Pri zadávaní znakov do vstupu sa nám zakaždým volá funkcia updateFilterHandler, v ktorej prebieha aktualizácia filterTerm. Práve tu používame náš hook useTransition, tak že obalíme funkciu nastavenia setFilterTerm do startTransition nasledovne:

function updateFilterHandler(event) { startTransition(() => { setFilterTerm(event.target.value); }); }

Týmto spôsobom sme nastavili pre aktualizáciu stavu filterTerm nízku prioritu a naše vstupné pole zostane citlivé na zmenu.

Pomocou premennej isPending môžeme používateľovi ukázať, že aktualizácia zoznamu ešte prebieha. Vypíšme túto informáciu pod vstupným poľom, kým sa zoznam aktualizuje:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>aktualizácia ...</p>} <ProductList products={filteredProducts} /> </div> );
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ť