⊗jsrtPmHkUTr 17 of 47 menu

Prestatie-optimalisatie Hook useTransition in React

De prestatie-optimalisatie hook useTransition stelt ons in staat states bij te werken zonder de gebruikersinterface te blokkeren.

Met deze hook kunnen we een lage prioriteit toekennen aan het bijwerken van een state, waardoor het bijwerken van andere states een hoge prioriteit kan hebben en zonder vertragingen kan worden uitgevoerd.

Een voorbeeld is het filteren van een vervolgkeuzelijst met producten terwijl de gebruiker tekens invoert in het zoekveld. Natuurlijk kan de lijst zelf worden weergegeven met enige vertraging, maar we zouden niet willen dat de tekens in het zoekveld met vertraging worden ingevoerd.

Laten we eens kijken hoe de hook useTransition ons in dergelijke gevallen kan helpen. Stel, we hebben een stuk code van het hoofd- component. Laten we het analyseren:

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

Hier zien we twee variabelen voor useTransition. De variabele isPending bevat een booleaanse waarde en geeft aan of het updateproces is voltooid, en startTransition is de functie die het mogelijk maakt om de prioriteit van de update te verlagen:

const [isPending, startTransition] = useTransition();

We hebben ook de state filterTerm, waarin de invoerexpressie wordt opgeslagen, en de functie setFilterTerm om deze in te stellen:

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

Bij het invoeren van tekens in de input wordt elke keer de functie updateFilterHandler aangeroepen, waarin de filterTerm wordt bijgewerkt. Dit is waar we onze hook useTransition toepassen, door de set-functie setFilterTerm in startTransition te wrappen als volgt:

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

Op deze manier hebben we een lage prioriteit ingesteld voor het bijwerken van de state filterTerm en blijft ons invoerveld responsief.

Met behulp van de variabele isPending kunnen we de gebruiker laten zien dat de update van de lijst nog bezig is. Laten we deze informatie weergeven onder het invoerveld, zolang de lijst wordt bijgewerkt:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>Bijwerken ...</p>} <ProductList products={filteredProducts} /> </div> );
Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren