⊗jsrtPmHkUTr 17 of 47 menu

Hook pro optimalizaci výkonu useTransition v Reactu

Hook pro optimalizaci výkonu useTransition nám umožňuje aktualizovat stavy bez blokování grafického rozhraní.

S pomocí tohoto hooku můžeme nastavit aktualizaci nějakého stavu nízkou prioritu, což umožní aktualizaci jiných stavů mít vysokou prioritu a provádět se bez zpoždění.

Jako příklad lze uvést filtrování rozbalovacího seznamu produktů při zadávání znaků uživatelem do pole vyhledávání. Samozřejmě, samotný seznam se může zobrazovat s určitým zpožděním, ale nechtěli bychom, aby se znaky zadávaly do pole vyhledávání se zpožděním.

Podívejme se, jak nám v takových případech může pomoci hook useTransition. Předpokládejme, že máme kus kódu hlavní komponenty. Pojďme jej analyzovat:

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> ); }

Zde vidíme dvě proměnné pro useTransition. Proměnná isPending obsahuje logickou hodnotu a ukazuje, zda je proces aktualizace ukončen, a startTransition funkci, která umožňuje snížit prioritu aktualizace:

const [isPending, startTransition] = useTransition();

Také máme stav filterTerm, ve kterém je uložen výraz zadávaný do vstupního pole a funkce setFilterTerm pro jeho nastavení:

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

Při zadávání znaků do vstupního pole se nám pokaždé volá funkce updateFilterHandler, ve které probíhá aktualizace filterTerm. Právě zde používáme náš hook useTransition, obalujeme funkci nastavení setFilterTerm do startTransition následovně:

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

Tímto jsme nastavili pro aktualizaci stavu filterTerm nízkou prioritu a naše vstupní pole zůstane reagující.

Pomocí proměnné isPending můžeme uživateli ukázat, že aktualizace seznamu stále probíhá. Vypišme tuto informaci pod vstupní pole, dokud se seznam aktualizuje:

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