⊗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 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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць