React Router
Головна проблема DOM — він ніколи не був розрахований для створення динамічного інтерфейсу користувача (UI).
Багато бібліотек спрощували роботу з DOM, але не вирішували проблему з продуктивністю.
Ми можемо вносити зміни до копії, виходячи з наших потреб, а після цього застосовувати зміни до реального DOM. При цьому відбувається порівняння DOM-дерева з його віртуальною копією, визначається різниця та запускається перерисовка того, що було змінено.
Це одна сторінка, з якою взаємодіє користувач, сторінка динамічно перерисовується, а не завантажуються цілі сторінки з сервера.
| SPA | Багатосторінковий сайт. |
|---|---|
| Один HTML файл | На кожну сторінку окремий HTML файл. |
| Перехід між сторінками без перезавантаження. | На кожну сторінку окремий додаток. |
Підключаємо Router до нашого додатку
import { BrowserRouter } from 'react-router-dom'
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
path - шаблон, за яким будемо порівнювати запитаний URL (точна відповідність)element - компонент, який буде відрендерений за цим роутом
<Routes>
<Route path='/home/*' element={<Home />}>
<Route path='/products' element={<Products />} />
</Routes>
дозволяють змінити сторінку (компонент), яка відображається в даний момент та зміниши поточний URL.
<Link to='/home'>Home<Link>
Аналог <Link>, але який знає, чи є посилання активним.
<NavLink to='/home'>Home</NavLink>
<Route path='/product/:id' element={<Product/>} />
:id - Динамічна частина URL.
useParams - повертає об'єкт із динамічними параметрами URL, які були зіставлені з
path в компоненту Route
const params = useParams();
Елемент Navigate змінює поточний URL, коли рендериться
<Navigate to='/home' />
const navigate = useNavigate();
navigate('/products');
navigate('/products', { replace: true });
navigate(-2); // navigate(-1), navigate(1)
navigate('/products', {
search: `?sort=${isSortingAsc ? 'desc' : 'asc'}`,
});
Повертає об'єкт з інформацією про поточний URL.
const location = useLocation();