⊗jsrtPmHkUTr 17 of 47 menu

Reacts performansoptimering hook useTransition

Performansoptimeringen hook useTransition giver os mulighed for at opdatere tilstande uden at blokere brugergrænsefladen.

Med denne hook kan vi tildele en opdatering af en tilstand lav prioritet, hvilket giver andre tilstandsopdateringer høj prioritet og udførelse uden forsinkelse.

Et eksempel kunne være filtrering af en dropdown-liste over varer, mens brugeren indtaster tegn i søgefeltet. Selvfølgelig kan listen vises med en vis forsinkelse, men vi ville ikke ønske, at tegnene i søgefeltet blev indtastet med forsinkelse.

Lad os se, hvordan hook'en useTransition kan hjælpe os i sådanne tilfælde. Antag, at vi har et stykke kode fra hovedkomponenten. Lad os analysere det:

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

Her ser vi to variable for useTransition. Variablen isPending indeholder en boolsk værdi og viser om opdateringsprocessen er afsluttet, mens startTransition er en funktion, som giver mulighed for at nedsætte opdateringens prioritet:

const [isPending, startTransition] = useTransition();

Vi har også tilstanden filterTerm, der gemmer udtrykket indtastet i inputfeltet, og funktionen setFilterTerm for at indstille den:

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

Når der indtastes tegn i inputfeltet, kaldes funktionen updateFilterHandler hver gang, hvor opdatering af filterTerm finder sted. Det er her, vi anvender vores hook useTransition, ved at indpakke indstillingen setFilterTerm i startTransition på følgende måde:

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

På denne måde har vi givet opdateringen af tilstanden filterTerm lav prioritet, og vores inputfelt forbliver responsivt.

Ved hjælp af variablen isPending kan vi visse brugeren, at opdateringen af listen stadig er i gang. Lad os vise denne information under inputfeltet, mens listen opdateres:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>Opdaterer ...</p>} <ProductList products={filteredProducts} /> </div> );
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis