⊗jsrtPmRtNS 43 of 47 menu

Stanje navigacije u React Router-u

Ako kliknemo na proizvode u listi, vidimo da se stranica sa proizvodom prvi put učitava sa zakašnjenjem, a ostale već brzo, isto važi i za dodavanje i ažuriranje proizvoda, pošto imamo keš na strani klijenta.

U ovoj lekciji ćemo pokazati korisniku u kakvom stanju se nalazi naša stranica. U tome nam može pomoći huk useNavigation. Kao rezultat svog rada ovaj huk daje objekat sa nizom svojstava. Zanimaće nas jedno od njih - svojstvo state.

Svojstvo state može imati 3 vrednosti: 'idle' (ništa se ne dešava), 'submitting' (kada se pri slanju forme preko POST, PUT, PATCH ili DELETE pozove action rute), 'loading' (kada se pozove loader za sledeću rutu, da bi iscrtala sledeću stranicu). Zanimaće nas poslednja vrednost.

Hajdemo da odemo u fajl root.jsx i uvezemo ovaj huk:

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

Zatim, za rezultat koji huk vraća, napravićemo promenljivu navigation u funkciji Root - ispred return:

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

A sada ćemo iskoristiti njeno svojstvo state, ako je to vrednost 'loading', onda ćemo postaviti klasu loading za div, u kom se kod nas dešava iscrtavanje podataka o proizvodu:

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

Ostaje nam da dodamo stilove za klasu loading u index.css. Hajdemo u slučaju stanja učitavanja jednostavno povećati opacity:

div.loading { opacity: 0.3; }

Sada, ako, ponovo učitavajući sajt, kliknemo na proizvode u listi ili, na primer, dodamo nov proizvod, videćemo da će trenutna stranica na neki moment potamniti, pre nego što se pojavi sledeća.

Uzmite aplikaciju, koju ste kreirali u zadacima za prethodne lekcije. Koristeći se materijalom iz lekcije, uz pomoć huka useNavigation uradite tako da korisnik može da vidi da se sledeća stranica sa podacima o studentu učitava.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij