⊗jsrtPmRtNS 43 of 47 menu

Starea de navigare în React Router

Dacă facem clic pe produse din listă, vedem că prima dată pagina cu produsul se încarcă cu o întârziere, iar în celelalte cazuri deja rapid, la fel la adăugarea și actualizarea produsului, deorece avem cache pe partea clientului.

În această lecție vom afișa utilizatorului în ce stare se află pagina noastră. În aceasta ne poate ajuta hook-ul useNavigation. Rezultatul muncii sale acest hook returnează un obiect cu o serie de proprietăți. Ne va interesa una dintre ele - proprietatea state.

Proprietatea state poate avea 3 valori: 'idle' (nimic nu se întâmplă), 'submitting' (când la trimiterea formularului prin POST, PUT, PATCH sau DELETE este apelată action rutei), 'loading' (când este apelat încărcătorul pentru următoarea rută, pentru a randa pagina următoare). Ne va interesa ultima valoare.

Să intrăm în fișierul root.jsx și să importăm acest hook:

import { useNavigation } from 'react-router-dom';

Apoi, pentru rezultatul returnat de hook, să declarăm variabila navigation în funcția Root - înainte de return:

const { products } = useLoaderData(); const navigation = useNavigation();

Și acum să folosim proprietatea sa state, dacă aceasta va fi valoarea 'loading', atunci vom seta clasa loading pentru div-ul în care se află randarea datelor produsului:

<div id="product" className={navigation.state === 'loading' ? 'loading' : ''}> <Outlet /> </div>

Ne rămâne să adăugăm stiluri pentru clasa loading în index.css. Să în cazul stării de încărcare pur și simplu mărim opacity:

div.loading { opacity: 0.3; }

Acum, dacă, reîncărcând site-ul, facem clic pe produse în listă sau, de exemplu, adăugăm un produs nou, vom vedea că pagina curentă pentru un moment se va estompa, înainte de a apărea următoarea.

Luați aplicația creată de dvs. în sarcinile din lecțiile trecute. Folosind materialele lecției, cu ajutorul hook-ului useNavigation faceți astfel încât utilizatorul să poată vedea că următoarea pagină cu datele studentului se încarcă.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge