⊗jsrtPmHkUTr 17 of 47 menu

Хук оптимизације перформанси useTransition у React-у

Хук за оптимизацију перформанси useTransition нам омогућава да ажурирамо state-ове без блокирања графичког интерфејса.

Помоћу овог хука можемо подесити да ажурирање неког state-а има низак приоритет, што ће дозволити да ажурирања других state-ова имају висок приоритет и извршавају се без одлагања.

Као пример можемо навести филтрирање падајућег списка производа при уносу симбола од стране корисника у поље претраге. Наравно, сам списак може да се приказује са одређеним закашњењем, али не бисмо желели да се симболи уносе у поље претраге са закашњењем.

Хајде да погледамо како нам у таквим случајевима може помоћи хук useTransition. Претпоставимо да имамо део кода главног компонента. Хајде да га анализирамо:

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

Овде видимо две променљиве за useTransition. Променљива isPending садржи булову вредност и показује да ли је процес ажурирања завршен, а startTransition функцију, која омогућава смањење приоритета ажурирања:

const [isPending, startTransition] = useTransition();

Такође имамо state filterTerm, у коме се чува израз који се уноси у поље за унос и функцију setFilterTerm за његово постављање:

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

При уносу симбола у input код нас сваки пут позива функција updateFilterHandler, у којој се дешава ажурирање filterTerm. Управо овде примењујемо наш хук useTransition, обавијајући функцију постављања setFilterTerm у startTransition на следећи начин:

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

На тај начин смо поставили за ажурирање state-а filterTerm низак приоритет и наше поље за унос ће остати респонзивно.

Помоћу променљиве isPending можемо показати кориснику да је ажурирање списка још у току. Приказаћемо ту информацију испод поља за унос, док се списак ажурира:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>ажурирање у току ...</p>} <ProductList products={filteredProducts} /> </div> );
Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј