⊗jsrtPmRtNS 43 of 47 menu

Navigasjonsstatus i React Router

Hvis vi klikker på produkter i listen, ser vi at siden med produktet første gang lastes inn med forsinkelse, og deretter raskt de andre gangene, det samme gjelder ved adding og oppdatering av produkt, siden vi har cache på klientsiden.

I denne leksjonen vil vi vise brukeren i hvilken tilstand siden vår befinner seg. Her kan hooken useNavigation hjelpe oss. Resultatet av sitt arbeid gir denne hooken et objekt med en rekke egenskaper. Vi vil være interessert i en av dem - egenskapen state.

Egenskapen state kan ha 3 verdier: 'idle' (ingenting skjer), 'submitting' (når en skjema sendes via POST, PUT, PATCH eller DELETE og action for ruten er kalt), 'loading' (når lasteren for neste rute er kalt for å tegne neste side). Vi vil være interessert i den siste verdien.

La oss gå inn i filen root.jsx og importere denne hooken:

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

Deretter, for resultatet returnert av hooken, oppretter vi en variabel navigation i funksjonen Root - før return:

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

Og la oss nå bruke dens egenskap state, hvis verdien er 'loading', setter vi klassen loading for div-en der våre produktdata tegnes:

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

Gjenstår for oss å legge til stiler for klassen loading i index.css. La oss i tilfelle av lastetilstand bare øke opacity:

div.loading { opacity: 0.3; }

Nå, hvis vi, etter å ha lastet inn nettsiden på nytt, klikker på produkter i listen eller, for eksempel, legger til et nytt produkt, vil vi se at den nåværende siden i et øyeblikk blekner før neste side vises.

Ta applikasjonen du opprettet i oppgavene til tidligere leksjoner. Bruk materialet fra leksjonen, og ved hjelp av hooken useNavigation, gjør slik at brukeren kan se at neste side med studentdata lastes inn.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis