Διαδρομές στο React Router
Οι Διαδρομές (Routes) αποτελούν το πιο σημαντικό μέρος μιας εφαρμογής στο React Router. Ας εξετάσουμε ένα κομμάτι κώδικα από το προηγούμενο μάθημα:
const router = createBrowserRouter([
{
path: '/',
element: <div>Hello Router!</div>,
},
]);
Λοιπόν, οι ιδιότητες του αντικειμένου path και
element, που περάσαμε στη
συνάρτηση κατά τη δημιουργία του δρομολογητή, είναι
οι ιδιότητες του αντικειμένου Route. Στην πραγματικότητα,
αυτό το αντικείμενο έχει πολλές ιδιότητες, οι οποίες
μπορούν να βρεθούν στην επίσημη
τεκμηρίωση.
Στο μέλλον, θα μας φανούν χρήσιμες μερικές
από αυτές:
interface RouteObject {
path?: string;
index?: boolean;
children?: React.ReactNode;
caseSensitive?: boolean;
id?: string;
loader?: LoaderFunction;
action?: ActionFunction;
element?: React.ReactNode | null;
Component?: React.ComponentType | null;
errorElement?: React.ReactNode | null;
ErrorBoundary?: React.ComponentType | null;
handle?: RouteObject["handle"];
shouldRevalidate?: ShouldRevalidateFunction;
lazy?: LazyRouteFunction<RouteObject>;
}
Θα μπορούσαμε να χρησιμοποιήσουμε την εναλλακτική JSX σύνταξη και να γράψουμε τις ιδιότητες ως props για το στοιχείο Route, τότε το κομμάτι κώδικα θα έμοιαζε κάπως έτσι:
const router = createBrowserRouter(
createRoutesFromElements(
<Route
path = '/'
element = {<div>Hello Router!</div>}
/>
)
);
Και, φυσικά, θα έπρεπε να προσθέσουμε μερικές ακόμη γραμμές στην εισαγωγή:
import {
createRoutesFromElements,
createBrowserRouter,
RouterProvider,
Route,
} from 'react-router-dom';
Και οι δύο στυλ που παρουσιάζονται στο μάθημα είναι ισοδύναμα. Στο εξής, θα ακολουθούμε το πρώτο στυλ.
Πάρτε την εφαρμογή που δημιουργήσατε στις ασκήσεις των προηγούμενων μαθημάτων. Δοκιμάστε να ξαναγράψετε το κομμάτι κώδικα για τη δημιουργία του δρομολογητή (παλιό κρατήστε προς το παρόν σχολιασμένο), χρησιμοποιώντας την εναλλακτική JSX σύνταξη, που παρουσιάζεται στο μάθημα. Βεβαιωθείτε ότι η εφαρμογή λειτουργεί.
Επαναφέρετε στη θέση του όλο τον παλιό κώδικα, και αφαιρέστε τον νέο. Βεβαιωθείτε ότι η εφαρμογή λειτουργεί.