⊗jsrtPmRtNS 43 of 47 menu

Състояние на навигацията в React Router

Ако кликнем върху продукти в списъка, виждаме, че първият път страницата с продукта се зарежда със забавяне, а следващите пъти вече бързо, същото се отнася за добавяне и обновяване на продукт, тъй като имаме кеш от страна на клиента.

В този урок ще покажем на потребителя в какво състояние се намира нашата страница. В това може да ни помогне хукът useNavigation. Резултатът от работата си този хук връща обект с редица свойства. Нас ще ни интересува едно от тях - свойството state.

Свойството state може да има 3 стойности: 'idle' (нищо не се случва), 'submitting' (когато при изпращане на форма чрез POST, PUT, PATCH или DELETE е извикан action на маршрута), 'loading' (когато е извикан зареждач за следващия маршрут, за да се изобрази следващата страница). Нас ще ни интересува последната стойност.

Нека влезем във файла root.jsx и импортираме този хук:

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

След това, за върнатия от хука резултат, ще създадем променлива navigation във функцията Root - преди return:

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

А сега нека използваме нейното свойство state, ако това е стойност 'loading', тогава ще зададем клас loading за div, в който се изобразяват данните за продукта:

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

Остава да добавим стилове за класа loading във index.css. Нека в случай на състояние на зареждане просто увеличаваме opacity:

div.loading { opacity: 0.3; }

Сега, ако презаредим сайта и кликнем върху продукти в списъка или, например, добавим нов продукт, ще видим, че текущата страница за миг ще избелее, преди да се появи следващата.

Вземете приложението, създадено от вас в задачите към предишните уроци. Използвайки материалите от урока, с помощта на хука useNavigation направете така, че потребителят да може да види, че следващата страница с данни за студента се зарежда.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне