⊗jsrtPmHkUTr 17 of 47 menu

Suorituskyvyn optimointihook useTransition Reactissa

Suorituskyvyn optimointihook useTransition mahdollistaa tilapäivitykset estämättä käyttöliittymää.

Tämän hookin avulla voimme asettaa jonkin tilan päivitykselle matalan prioriteetin, mikä antaa muiden tilojen päivityksille korkean prioriteetin ja ne suoritetaan viiveettä.

Esimerkkinä voidaan mainita tuotelistassa olevan pudotusvalikon suodatus, kun käyttäjä kirjoittaa hakusanaan merkkejä. Lista voi tietysti näkyä jonkin viiveen kanssa, mutta emme haluaisi, että merkit syötetään hakukenttään viiveellä.

Katsotaan, kuinka hook useTransition voi auttaa meitä tällaisissa tapauksissa. Oletetaan, että meillä on koodinpätkä pääkomponentista. Analysoidaanpa sitä:

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

Tässä näemme kaksi muuttujaa useTransition:lle. Muuttuja isPending sisältää loogisen arvon ja näyttää onko päivitysprosessi valmis, ja startTransition on funktio, joka mahdollistaa päivityksen prioriteetin alentamisen:

const [isPending, startTransition] = useTransition();

Meillä on myös tila filterTerm, jossa tallennetaan hakukenttään kirjoitettu lauseke ja funktio setFilterTerm sen asettamiseksi:

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

Kun syötät merkkejä hakukenttään, funktiota updateFilterHandler kutsutaan joka kerta, ja siinä päivitetään filterTerm. Tässä kohtaa käytämme hookkia useTransition, käärimällä asetusfunktion setFilterTerm startTransition:iin seuraavasti:

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

Näin olemme asettaneet tilan filterTerm päivitykselle matalan prioriteetin ja hakukenttämme pysyy reagoivana.

Muuttujan isPending avulla voimme näyttää käyttäjälle, että listan päivitys on vielä käynnissä. Näytetään tämä tieto hakukentän alla, kun listaa päivitetään:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>päivitetään ...</p>} <ProductList products={filteredProducts} /> </div> );
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää