ReactJS - BrowserRouter: руковод BEGINNERS Guide to Routing in React
Привет, начинающие разработчики React! Сегодня мы отправимся в увлекательное путешествие в мир routing в приложениях React. Не волнуйтесь, если вы новички в программировании; я буду вашим доброжелательным проводником, explaining everything step by step. Так что налейте себе чашечку кофе и погружайтесь с нами!
Основные концепции маршрутизации
Что такое маршрутизация?
Представьте, что вы находитесь в большой библиотеке. Вы хотите найти конкретную книгу, но не знаете, где она находится. Вот где на помощь приходит библиотечный каталог. Он tells you exactly который стеллаж нужно смотреть. В веб-приложениях маршрутизация работает аналогичным образом. Это как карта, которая tells your app который компонент отображать на основе URL.
Why do we need routing?
Давайте представим, что вы создаете личный сайт с разными страницами: Home, About и Contact. Без маршрутизации вам пришлось бы вручную показывать и скрывать компоненты на основе действий пользователя. Это утомительно и error-prone. Маршрутизация автоматизирует этот процесс, делая ваше приложение более структурированным и удобным для пользователя.
Введение в BrowserRouter
В мире React у нас есть потрясающий инструмент под названием BrowserRouter
. Он является частью библиотеки react-router-dom
и помогает нам реализовать маршрутизацию в наших приложениях React. Представьте его как personal librarian вашего приложения, который всегда готов направить пользователей к правильной "книге" (или в нашем случае, компоненту).
Какapply маршруты
Теперь, когда мы понимаем концепцию, давайте脏 our hands с некоторыми кодами!
Шаг 1: Установка
В первую очередь, нам нужно установить пакет react-router-dom
. Откройте ваш терминал и запустите:
npm install react-router-dom
Шаг 2: Настройка BrowserRouter
Давайте начнем с того, чтобы обернуть наш main App компонент BrowserRouter. Вот как:
import React from 'react';
import { BrowserRouter as Router } from 'react-router-dom';
import App from './App';
const Root = () => (
<Router>
<App />
</Router>
);
export default Root;
В этом примере мы import BrowserRouter
и переименовываем его в Router
для простоты. Затем мы оборачиваем наш App
компонент в Router
. Это устанавливает контекст маршрутизации для всего нашего приложения.
Шаг 3: Определение маршрутов
Теперь давайте определим некоторые маршруты в нашем App
компоненте:
import React from 'react';
import { Route, Switch } from 'react-router-dom';
import Home from './components/Home';
import About from './components/About';
import Contact from './components/Contact';
const App = () => (
<div>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</Switch>
</div>
);
export default App;
Давайте разберем это:
- Мы import
Route
иSwitch
изreact-router-dom
. -
Switch
обеспечивает то, что только один маршрут отрисовывается за один раз. - Каждый
Route
компонент определяет соответствие между URL-путем и React-компонентом. - Проп
exact
на маршруте home обеспечивает то, что он соответствует только exact пути "/".
Шаг 4: Создание навигации
Теперь давайте добавим навигацию в наше приложение:
import React from 'react';
import { Link } from 'react-router-dom';
const Navigation = () => (
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/contact">Contact</Link></li>
</ul>
</nav>
);
export default Navigation;
Здесь мы используем компонент Link
из react-router-dom
. Он resembles an <a>
тег, но предотвращает перезагрузку страницы при навигации.
Шаг 5: Объединение всего вместе
Давайте обновим наш App
компонент, чтобы включить навигацию:
import React from 'react';
import { Route, Switch } from 'react-router-dom';
import Navigation from './components/Navigation';
import Home from './components/Home';
import About from './components/About';
import Contact from './components/Contact';
const App = () => (
<div>
<Navigation />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</Switch>
</div>
);
export default App;
И вот оно! Базовое приложение React с настроенной маршрутизацией.
Продвинутые техники маршрутизации
Теперь, когда мы рассмотрели основы, давайте посмотрим на некоторые более продвинутые техники:
1. URL-параметры
Иногда вы хотите передать данные через URL. Например, страница профиля пользователя:
<Route path="/user/:id" component={UserProfile} />
В вашем UserProfile
компоненте вы можете получить доступ к параметру id
следующим образом:
import { useParams } from 'react-router-dom';
const UserProfile = () => {
let { id } = useParams();
return <h1>User Profile for user {id}</h1>;
};
2. Вложенные маршруты
Вы можете вложить маршруты в компонентах. Это полезно для сложных макетов:
const App = () => (
<div>
<Navigation />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/users" component={Users} />
</Switch>
</div>
);
const Users = () => (
<div>
<h1>Users</h1>
<Switch>
<Route exact path="/users" component={UserList} />
<Route path="/users/:id" component={UserProfile} />
</Switch>
</div>
);
3. Программная навигация
Иногда вы хотите navigate программно, например, после отправки формы:
import { useHistory } from 'react-router-dom';
const LoginForm = () => {
let history = useHistory();
const handleSubmit = () => {
// ... handle login logic
history.push('/dashboard');
};
return (
<form onSubmit={handleSubmit}>
{/* form fields */}
</form>
);
};
Таблица методов маршрутизации
Вот удобная таблица, резюмирующая основные методы маршрутизации, которые мы обсуждали:
Метод | Цель | Пример |
---|---|---|
<BrowserRouter> |
Оборачивает приложение для включения маршрутизации | <BrowserRouter><App /></BrowserRouter> |
<Route> |
Определяет маршрут | <Route path="/about" component={About} /> |
<Switch> |
Обеспечивает отрисовку только одного маршрута | <Switch><Route ... /><Route ... /></Switch> |
<Link> |
Создает ссылку на маршрут | <Link to="/about">About</Link> |
useParams() |
Получает доступ к URL-параметрам | let { id } = useParams(); |
useHistory() |
Программная навигация | history.push('/dashboard'); |
И вот оно,folks! Мы прошли через основы маршрутизации в React с использованием BrowserRouter. Помните, что практика делает perfect, так что не бойтесь экспериментировать с этими концепциями в своих проектах.
Счастливого кодирования, и пусть ваши маршруты всегда ведут вас к правильному компоненту!
Credits: Image by storyset