⊗jsrtPmHkUTr 17 of 47 menu

Ytelsesoptimaliseringshooken useTransition i React

Ytelsesoptimaliseringshooken useTransition tillater oss å oppdatere tilstander uten å blokkere det grafiske grensesnittet.

Med denne hooken kan vi tildele en lav prioritet til oppdateringen av en tilstand, noe som lar oppdateringer av andre tilstander ha høy prioritet og utføres uten forsinkelser.

Et eksempel kan være filtrering av en rullegardinliste med produkter mens brukeren skriver tegn i søkefeltet. Selvfølgelig kan listen vises med en viss forsinkelse, men vi ønsker ikke at tegnene som skrives inn i søkefeltet, skal ha forsinkelse.

La oss se hvordan hooken useTransition kan hjelpe oss i slike tilfeller. Anta at vi har et kodeutdrag fra hovedkomponenten. La oss analysere den:

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 variabler for useTransition. Variabelen isPending inneholder en boolsk verdi og viser om oppdateringsprosessen er avsluttet, mens startTransition er en funksjon som tillater oss å senke prioriteten på oppdateringen:

const [isPending, startTransition] = useTransition();

Vi har også en tilstand filterTerm, som lagrer uttrykket som skrives inn i inndatafeltet, og en funksjon setFilterTerm for å sette den:

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

Ved inntasting av tegn i inndatafeltet kalles funksjonen updateFilterHandler hver gang, der oppdateringen av filterTerm skjer. Det er her vi bruker vår hook useTransition, ved å pakke inn settfunksjonen setFilterTerm i startTransition som følger:

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

Dermed har vi satt lav prioritet for oppdateringen av tilstanden filterTerm, og vårt inndatafelt forblir responsivt.

Ved hjelp av variabelen isPending kan vi vise brukeren at oppdateringen av listen fortsatt pågår. La oss vise denne informasjonen under inndatafeltet mens listen oppdateres:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>oppdaterer ...</p>} <ProductList products={filteredProducts} /> </div> );
Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis