⊗jsrtPmHkUTr 17 of 47 menu

Hook di Ottimizzazione delle Prestazioni useTransition in React

L'hook di ottimizzazione delle prestazioni useTransition ci permette di aggiornare gli stati senza bloccare l'interfaccia grafica.

Con l'aiuto di questo hook possiamo assegnare a un aggiornamento di qualche stato una priorità bassa, il che permetterà agli aggiornamenti degli altri stati di avere una priorità alta e di essere eseguiti senza ritardi.

Come esempio si può citare il filtraggio di un menu a discesa di prodotti mentre l'utente inserisce caratteri nel campo di ricerca. Certo, l'elenco stesso potrebbe essere visualizzato con un certo ritardo, ma non vorremmo che i caratteri venissero inseriti nel campo di ricerca con ritardo.

Diamo un'occhiata a come l'hook useTransition può aiutarci in questi casi. Supponiamo di avere un frammento di codice del componente principale. Analizziamolo:

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

Qui vediamo due variabili per useTransition. La variabile isPending contiene un valore booleano e indica se il processo di aggiornamento è terminato, mentre startTransition è la funzione che permette di abbassare la priorità di aggiornamento:

const [isPending, startTransition] = useTransition();

Abbiamo anche lo stato filterTerm, in cui è memorizzata l'espressione inserita nel campo di input e la funzione setFilterTerm per impostarlo:

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

Quando i caratteri vengono inseriti nell'input, la funzione updateFilterHandler viene chiamata ogni volta, e all'interno avviene l'aggiornamento di filterTerm. È proprio qui che applichiamo il nostro hook useTransition, avvolgendo la funzione di impostazione setFilterTerm in startTransition nel modo seguente:

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

In questo modo, abbiamo impostato una priorità bassa per l'aggiornamento dello stato filterTerm e il nostro campo di input rimarrà reattivo.

Tramite la variabile isPending possiamo mostrare all'utente che l'aggiornamento dell'elenco è ancora in corso. Visualizziamo questa informazione sotto il campo di input, mentre l'elenco si sta aggiornando:

return ( <div> <input type="text" onChange={updateFilterHandler} /> {isPending && <p>aggiornamento in corso ...</p>} <ProductList products={filteredProducts} /> </div> );
Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta