⊗jsrtPmHkUTr 17 of 47 menu

Hook za optimizaciju performansi useTransition u React-u

Hook za optimizaciju performansi useTransition omogućava nam ažuriranje stanja bez blokiranja grafičkog interfejsa.

Pomoću ovog hook-a možemo postaviti nizak prioritet ažuriranju bilo kog stanja, što će omogućiti da ažuriranja drugih stanja imaju visok prioritet i izvršavaju se bez kašnjenja.

Kao primer možemo navesti filtriranje padajuće liste proizvoda prilikom unosa simbola od strane korisnika u polje pretrage. Naravno, sama lista se može prikazivati sa određenim kašnjenjem, ali mi ne bismo želeli da se simboli unose u polje pretrage sa kašnjenjem.

Pogledajmo kako nam u takvim slučajevima može pomoći hook useTransition. Pretpostavimo da imamo deo koda glavnog komponenta. Hajde da ga analiziramo:

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

Ovde vidimo dve promenljive za useTransition. Promenljiva isPending sadrži bulovsku vrednost i pokazuje da li je proces ažuriranja završen, a startTransition je funkcija koja omogućava smanjenje prioriteta ažuriranja:

const [isPending, startTransition] = useTransition();

Takođe imamo stanje filterTerm, u kojem se čuva izraz koji se unosi u polje za unos i funkcija setFilterTerm za njegovo postavljanje:

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

Prilikom unosa simbola u input, kod nas svaki put poziva funkcija updateFilterHandler, u kojoj se dešava ažuriranje filterTerm. Upravo ovde primenjujemo naš hook useTransition, obavijajući funkciju postavljanja setFilterTerm u startTransition na sledeći način:

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

Na ovaj način, postavili smo za ažuriranje stanja filterTerm nizak prioritet i naše polje za unos će ostati odzivno.

Pomoću promenljive isPending mi možemo pokazati korisniku da je ažuriranje liste još u toku. Ispisaćemo tu informaciju ispod polja za unos, dok se lista ažurira:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>Ažuriranje u toku...</p>} <ProductList products={filteredProducts} /> </div> );
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij