React Router to niezwykle popularna biblioteka, która umożliwia tworzenie zaawansowanych aplikacji jednostronicowych (SPA). Dzięki React Router można zaimplementować routing po stronie klienta, co znacząco przyspiesza działanie aplikacji. W tym artykule przyjrzymy się bliżej ekosystemowi React Routera - jego podstawowym składnikom, sposobom konfiguracji i przekazywania parametrów. Dowiesz się, jak React Router obsługuje zmiany adresu URL. Omówione zostaną również korzyści płynące z zastosowania React Router w projekcie.
Jak React Router działa?
React Router to popularna biblioteka routingowa dla aplikacji stworzonych w React. Pozwala ona na stworzenie zaawansowanych aplikacji jednostronicowych (SPA - Single Page Application), w których zmiana widoku odbywa się bez przeładowywania całej strony. Zamiast tego, React Router obsługuje zmiany widoku poprzez modyfikację adresu URL i renderowanie odpowiednich komponentów React.
Działanie React Router opiera się na kilku kluczowych elementach:
- Ścieżki (Routes) - określają powiązania pomiędzy ścieżkami URL a komponentami React.
- Linki (Links) - komponenty pozwalające na nawigację poprzez klikanie, bez przeładowywania strony.
- Przełączniki (Switches) - wyświetlają tylko pierwszy pasujący komponent React dla danej ścieżki.
Po dodaniu odpowiednich ścieżek i komponentów, React Router monitoruje adres URL i wyświetla pasujący widok bez przeładowywania strony. Pozwala to na bardzo płynną nawigację w aplikacji.
Przykład działania
Na przykład, mając zdefiniowane ścieżki dla adresów "/users" i "/products", React Router wyświetli komponent Users dla pierwszego adresu, a Products dla drugiego. Po wejściu bezpośrednio w adres "/products" zostanie wyświetlony odpowiedni widok, bez przeładowywania całej aplikacji.
Biblioteka React Router i jej składowe
React Router składa się z kilku kluczowych komponentów:
- Router - komponent współrzędny, zazwyczaj BrowserRouter lub HashRouter.
- Route - definiuje ścieżkę i powiązany z nią komponent.
- Link - komponent do tworzenia linków w aplikacji.
- NavLink - wariant komponentu Link z dodatkowymi stylami.
- Switch - renderuje tylko pierwszą pasującą ścieżkę.
- Redirect - przekierowuje na inną ścieżkę.
Te komponenty pozwalają zdefiniować routing aplikacji i zaimplementować nawigację po stronie klienta bez przeładowywania całej strony.
Przykład użycia
Typowa konfiguracja React Router wygląda następująco:
Produkty
Dzięki temu kliknięcie w link do "/products" załaduje odpowiedni widok, bez przeładowywania strony.
Czytaj więcej: Procesory Intel Xeon - wszystko o wydajnych procesorach serwerowych
Konfiguracja ścieżek w React Router
Jednym z kluczowych elementów React Router są komponenty Route, które wiążą ścieżki z komponentami React.
Podstawowa składnia Route wygląda tak:
Np. aby wyświetlić komponent Users pod adresem "/users":
Ścieżki mogą zawierać parametry, np. "/users/:id" lub wildcardy "/users/*". Parametry te można odczytać w komponencie za pomocą hooka useParams().
Możliwe jest zagnieżdżanie Route, aby zbudować bardziej złożone układy. Route może renderować zarówno pojedynczy komponent, jaki i cały układ zagnieżdżonych komponentów.
Leniwe ładowanie komponentów
Domyślnie Route ładują komponenty leniwie - renderują je tylko wtedy, gdy pasuje ścieżka. Można to zmienić stosując atrybut exact lub strict.
Renderowanie komponentów w React Router
Istnieje kilka sposobów na sterowanie tym, które komponenty są renderowane w React Router w zależności od ścieżki:
Switch
Komponent Switch sprawia, że wyrenderowana zostanie tylko pierwsza pasująca ścieżka, ignorując pozostałe. Użycie Switch pozwala uniknąć renderowania wielu komponentów dla tej samej ścieżki.
Route render / children
Komponent Route może przyjmować również funkcję render zamiast propsa component. Pozwala to na większą kontrolę nad renderowaniem:
}
/>
Podobną kontrolę daje przekazanie komponentu jako children zamiast component.
Outlet
Outlet pozwala na renderowanie zagnieżdżonych komponentów w miejscu swojego użycia. Przydatne gdy layout aplikacji jest podzielony na części.
{/* Tutaj załaduje się komponent z Route */}
Przekazywanie parametrów w React Router
React Router umożliwia dostęp do parametrów zdefiniowanych w ścieżce na kilka sposobów:
useParams
Hook useParams zwraca obiekt z parametrami ścieżki. Działa w komponentach zagnieżdżonych w Route.
// dla ścieżki /products/:id
const { id } = useParams();
useLocation
useLocation zwraca obiekt location, który zawiera m.in. aktualny adres URL i ewentualne parametry przekazane w query stringu.
const location = useLocation();
const { search } = location;
Propsy Route'a
Propsy przekazane do komponentu zagnieżdżonego w Route zawierają parametry ścieżki w props.match.params oraz parametry z query stringa w props.location.search.
// (...)
const Product = (props) => {
const id = props.match.params.id;
}
Obsługa zmian adresu URL w React Router
React Router pozwala obsłużyć zmiany adresu URL na kilka sposobów:
NavLink i Link
Komponenty NavLink i Link z biblioteki React Router pozwalają zmieniać adres URL po kliknięciu, bez przeładowywania strony.
useNavigate
Hook useNavigate zwraca funkcję navigate, która pozwala programowo zmienić ścieżkę, np. w handlerze zdarzenia.
import { useNavigate } from 'react-router-dom';
const navigate = useNavigate();
const handleSave = () => {
// zapis danych
navigate('/products');
}
push
Obiekt history udostępniany przez Routera posiada metodę push(), która pozwala zmienić adres URL z poziomu kodu.
import { useHistory } from 'react-router-dom';
const history = useHistory();
history.push('/home');
Korzyści z React Router w aplikacji
Główne zalety użycia React Router to:
- Routing po stronie klienta bez przeładowywania strony
- Szybka zmiana widoków aplikacji
- Czytelne adresy URL opisujące stan aplikacji
- Łatwa nawigacja przy użyciu komponentów Link i NavLink
- Dostęp do parametrów ścieżki za pomocą hooków i propsów
- Prosta autoryzacja i ograniczenie dostępu do części aplikacji
- Łatwa integracja z biblioteką React i ekosystemem
Dzięki React Router możliwe jest zbudowanie zaawansowanej, jednostronicowej aplikacji o bogatej nawigacji i czytelnych adresach URL odzwierciedlających stan aplikacji. Stanowi nieodłączną część nowoczesnych aplikacji webowych opartych na React.
Podsumowanie
React Router to nieodłączny element nowoczesnych aplikacji internetowych opartych na React. Pozwala na stworzenie bogatej nawigacji bez przeładowywania strony, dzięki routingu po stronie klienta. Kluczowe w React Router są komponenty Route wiążące ścieżki URL z widokami aplikacji. Do zmiany widoku służą komponenty Link i NavLink, a aktualna ścieżka jest dostępna poprzez hooki jak useParams. Konfigurując Routes, Links i komponenty aplikacji można zbudować SPA o czytelnej nawigacji i szybkim działaniu.
React Router składa się z kilku podstawowych komponentów odpowiedzialnych za routing i nawigację. Należą do nich m.in. Router, Route, Link czy Switch. Ich kombinacja pozwala na elastyczne definiowanie widoków aplikacji i powiązanie ich ze ścieżkami URL. Oprócz deklaratywnego routingu, React Router udostępnia też funkcje nawigacji programowej jak useNavigate czy history. Komponenty React Router integracji się bezpośrednio z Reactem, tworząc spójną całość.
Korzystanie z React Router w projekcie daje szereg korzyści. Przede wszystkim pozwala uniknąć przeładowywania całej strony podczas nawigacji, zapewniając płynne UI. Adres URL odzwierciedla aktualny stan aplikacji. Nawigacja za pomocą komponentów Link i NavLink jest prosta w implementacji i użyciu. Parametry ścieżek są łatwo dostępne poprzez hooki i propsy. React Router to dobry standard routingu w Reactu, przyspieszający tworzenie SPA.
Podsumowując, React Router to biblioteka o kluczowym znaczeniu dla routingu w aplikacjach React. Pozwala na stworzenie bogatego interfejsu nawigacji bez przeładowywania strony i zapewnia integrację adresu URL ze stanem aplikacji. Jest to najpopularniejsze i rekomendowane rozwiązanie do obsługi routingu po stronie klienta w Reakcie.