⊗jsrtPmHkUTr 17 of 47 menu

Prestandaoptimeringshooket useTransition i React

Prestandaoptimeringshooket useTransition tillåter oss att uppdatera tillstånd utan att blockera användargränssnittet.

Med denna hook kan vi tilldela en låg prioritet för uppdateringen av ett visst tillstånd, vilket gör att uppdateringar av andra tillstånd kan ha hög prioritet och utföras utan fördröjningar.

Ett exempel på detta är filtrering av en rullgardinslista med produkter när användaren skriver in tecken i sökfältet. Listan kan förstås visas med en viss fördröjning, men vi skulle inte vilja att tecknen skrivs in i sökfältet med fördröjning.

Låt oss se hur hooken useTransition kan hjälpa oss i sådana fall. Antag att vi har en kodbit från huvudkomponenten. Låt oss analysera 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> ); }

Här ser vi två variabler för useTransition. Variabeln isPending innehåller ett booleskt värde och visar om uppdateringsprocessen är avslutad, och startTransition är en funktion som möjliggör att sänka prioriteten för en uppdatering:

const [isPending, startTransition] = useTransition();

Vi har också ett tillstånd filterTerm, där uttrycket som skrivs in i inmatningsfältet lagras, och en funktion setFilterTerm för att ställa in det:

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

När tecken skrivs in i inputfältet anropas funktionen updateFilterHandler varje gång, där uppdateringen av filterTerm sker. Det är här vi använder vår hook useTransition, genom att wrappa inställningsfunktionen setFilterTerm i startTransition på följande sätt:

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

På så sätt har vi satt en låg prioritet för uppdateringen av tillståndet filterTerm och vårt inmatningsfält förblir responsivt.

Med hjälp av variabeln isPending kan vi visa användaren att listuppdateringen fortfarande pågår. Låt oss visa denna information under inmatningsfältet medan listan uppdateras:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>uppdaterar ...</p>} <ProductList products={filteredProducts} /> </div> );
Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa