npm install react-router-dom
===== Первинне налаштування =====
1. обернути компонентом **BrowserRouter** всі програми в **main.jsx**.
import { BrowserRouter } from "react-router-dom";
ReactDOM.createRoot(document.getElementById("root")).render(
);
2. В підлеглих компонентах використовувати **routes** і **route**
**Приклад:**
// src/components/App.jsx
import { Routes, Route } from "react-router-dom";
import Home from "path/to/pages/Home";
import About from "path/to/pages/About";
import Products from "path/to/pages/Products";
export const App = () => {
return (
} />
} />
} />
);
};
Конвенція структури файлів програми передбачає зберігання всіх компонентів у папці **src/components**. Компонент сторінки це звичайнісінький React-компонент, який містить у собі розмітку цілої сторінки вашої програми. Для зручності та структурованості такі компоненти зберігаються окремо від усіх, у папці **src/pages**.
===== Сторінка помилки навігації =====
Що буде, якщо користувач перейде за посиланням /non-existing-route або будь-якому іншому, якого немає в нашому додатку? Він побачить порожню вкладку браузера, без будь-якого контенту, оскільки жоден з описаних нами
import { Routes, Route } from "react-router-dom";
import Home from "path/to/pages/Home";
import About from "path/to/pages/About";
import Products from "path/to/pages/Products";
import NotFound from "path/to/pages/NotFound";
const App = () => {
return (
} />
} />
} />
} />
);
};
===== Компоненти та
// src/components/App.jsx
import { Routes, Route, NavLink } from "react-router-dom";
import clsx from 'clsx';
import Home from "path/to/pages/Home";
import About from "path/to/pages/About";
import Products from "path/to/pages/Products";
import NotFound from 'path/to/pages/NotFound';
import css from './App.module.css';
const buildLinkClass = ({ isActive }) => {
return clsx(css.link, isActive && css.active);
};
export const App = () => {
return (
} />
} />
} />
} />
);
};
===== URL-параметри =====
} />
Додамо до нашої програми маршрут сторінки одного продукту з адресою /products/:productId. Це окрема сторінка, ніяк не прив'язана до /products - сторінці відображення всіх продуктів.
// src/components/App.jsx
import { Routes, Route, Link } from "react-router-dom";
import Home from "path/to/pages/Home";
import About from "path/to/pages/About";
import Products from "path/to/pages/Products";
import NotFound from "path/to/pages/NotFound";
import ProductDetails from "path/to/pages/ProductDetails";
export const App = () => {
return (
} />
} />
} />
} />
} />
);
};
===== Хук UseParams =====
[[xuk_useparams|Хук useParams]]
===== Вкладені маршрути =====
- Вкладені маршрути дозволяють описувати логіку «підсторінок», тобто якийсь URL по якому крім батьківського компонента цілої сторінки буде відображатися ще якийсь дочірній, вкладений компонент.
- Наприклад, нам необхідно щоб на /about/mission, /about/team та /about/reviews крім контенту сторінки «Про нас» відображалася ще якась додаткова, більш специфічна інформація. Нехай це буде кілька різноманітних компонентів: стаття про місію нашої компанії, галерея з інформацією про співробітників та відгуки користувачів.
// ✅ Правильно
}>
} />
} />
} />