⊗jsrtPmHkUTr 17 of 47 menu

Uporaba prehodnega kavka (useTransition) za optimizacijo zmogljivosti v Reactu

Kavk za optimizacijo zmogljivosti useTransition nam omogoča posodabljanje stanj brez blokiranja grafičnega vmesnika.

S tem kavkom lahko določimo posodobitvi nekega stanja nizko prioriteto, kar omogoča, da imajo posodobitve ostalih stanj visoko prioriteto in se izvajajo brez zakasnitev.

Kot primer lahko navedemo filtriranje spustnega seznama izdelkov med vnašanjem znakov v iskalno polje s strani uporabnika. Seveda se lahko seznam prikaže z določeno zakasnitvijo, vendar ne želimo, da se znaki vnašajo v iskalno polje z zakasnitvijo.

Poglejmo, kako nam lahko v takih primerih pomaga kavk useTransition. Predpostavimo, da imamo kos kode glavnega komponenta. Analizirajmo ga:

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

Tu vidimo dve spremenljivki za useTransition. Spremenljivka isPending vsebuje logično vrednost in kaže, ali je proces posodabljanja končan, medtem ko startTransition je funkcija, ki omogoča znižanje prioritete posodobitve:

const [isPending, startTransition] = useTransition();

Prav tako imamo stanje filterTerm, v katerem je shranjen izraz, vnesen v polje za vnos, in funkcijo setFilterTerm za njegovo nastavitev:

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

Ob vnosu znakov v vnosno polje se vsakič pokliče funkcija updateFilterHandler, v kateri pride do posodobitve filterTerm. Prav tu uporabimo naš kavk useTransition, tako da funkcijo nastavitve setFilterTerm ovijemo v startTransition na naslednji način:

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

Tako smo določili za posodobitev stanja filterTerm nizko prioriteto in naše vnosno polje ostane odzivno.

S pomočjo spremenljivke isPending lahko uporabniku pokažemo, da je posodobitev seznama še v teku. Izpišimo to informacijo pod vnosnim poljem, medtem ko se seznam posodablja:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>Posodabljanje ...</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
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni