⊗jsrtPmHkUTr 17 of 47 menu

Хук аптымізацыі прадукцыйнасці useTransition у React

Хук аптымізацыі прадукцыйнасці useTransition дазваляе нам абнаўляць стэйты без блакіроўкі графічнага інтэрфейсу.

З дапамогай гэтага хуку мы можам задаць абнаўленню якога-небудзь стэйта нізкі прыярытэт, што дазволіць абнаўленню іншых стэйтаў мець высокі прыярытэт і выконвацца без затрымак.

У якасці прыкладу можна прывесці фільтрацыю выпадаючага спісу тавараў пры ўводзе карыстальнікам сімвалаў у поле пошуку. Вядома, сам спіс можа адлюстроўвацца з нейкай затрымкай, але нам бы не хацелася, каб сімвалы ўводзіліся ў поле пошуку з затрымкай.

Давайце паглядзім, як у такіх выпадках нам можа дапамагчы хук 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();

Таксама ў нас ёсць стэйт filterTerm, у якім захоўваецца ўводзімае ў поле ўводу выраз і функцыя setFilterTerm для яго ўстаноўкі:

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

Пры ўводзе сімвалаў у інпут у нас кожны раз выклікаецца функцыя updateFilterHandler, у якой адбываецца абнаўленне filterTerm. Менавіта тут мы ўжываем наш хук useTransition, абгортваючы функцыю ўстаноўкі setFilterTerm у startTransition наступным чынам:

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

Такім чынам, мы ўстанавілі для абнаўлення стэйта filterTerm нізкі прыярытэт і наша поле ўводу застанецца адклікавым.

Пры дапамозе зменнай isPending мы можам паказаць карыстальніку, што абнаўленне спісу яшчэ ў працэсе. Вывядзем гэтую інфармацыю пад полем уводу, пакуль спіс абнаўляецца:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>updating ...</p>} <ProductList products={filteredProducts} /> </div> );
Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικά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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць