JavaRush /Курсы /Модуль 3: React /Использование Link и NavLink для навигации между страница...

Использование Link и NavLink для навигации между страницами

Модуль 3: React
9 уровень , 5 лекция
Открыта

Зачем нужны Link и NavLink?

Вы ведь не хотите, чтобы пользователи вашего приложения, как потерянные туристы, находили страницы только по случайному изменению URL? Здесь на арену выходят Link и NavLink! Эти компоненты помогают создавать навигационные ссылки для переходов между страницами внутри вашего приложения.

Если вы до сих пор думаете, что можно "просто использовать теги <a>", то... ну да, можно, но это будет уничтожать состояние приложения и перезагружать всю страницу. В этом нет никакого удовольствия, ни вам, ни вашему пользователю, ни вашему боссу. Link и NavLink работают поверх механизма маршрутизатора, сохраняя SPA-природу приложения.

Link: первый шаг к дружелюбной навигации

Компонент Link из библиотеки react-router-dom — это обертка вокруг обычного HTML-тега <a>. Но, в отличие от <a>, при нажатии на ссылку через Link страница не будет перезагружаться. Вместо этого React просто обновляет состояние приложения, рендерит нужный компонент и всё это — быстро и без заметной глазу задержки.

Давайте посмотрим простой пример того, как использовать Link:

import React from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';

export const App: React.FC = () => {
  return (
    <Router>
      <nav>
        {/* Используем Link для навигации */}
        <Link to="/">Главная</Link>
          <Link to="/about">О нас</Link>
      </nav>
      <Switch>
        <Route exact path="/">
          <h1>Добро пожаловать на главную!</h1>
        </Route>
        <Route path="/about">
          <h1>О компании</h1>
        </Route>
      </Switch>
    </Router>
  );
};

Вот ваш минимальный пример! При нажатии на "Главная" или "О нас" браузер обновит контент без перезагрузки страницы. Красота, правда?

Параметры компонента Link

Посмотрим, какие параметры можно передать в Link:

  1. to — указывает путь, куда ведет ссылка. Это обязательный параметр.
  2. replace — заменяет текущую запись в истории маршрутов вместо добавления новой. Полезно, если вы не хотите, чтобы пользователь вернулся к предыдущей странице по кнопке "Назад".

Пример с replace:

<Link to="/profile" replace>
  Профиль
</Link>

NavLink: магия активных ссылок

Если Link — это простая ссылка, то NavLink — это более "умная" ссылка. Она знает, какая страница в данный момент активна, и позволяет вам стилизовать активные ссылки.

Как использовать NavLink?

Работа с NavLink похожа на работу с Link:

import React from 'react';
import { BrowserRouter as Router, Route, Switch, NavLink } from 'react-router-dom';

export const App: React.FC = () => {
  return (
    <Router>
      <nav>
        {/* Используем NavLink для навигации */}
        <NavLink to="/" exact activeClassName="active-link">
          Главная
        </NavLink>
        <NavLink to="/about" activeClassName="active-link">
          О нас
        </NavLink>
      </nav>
      <Switch>
        <Route exact path="/">
          <h1>Добро пожаловать на главную!</h1>
        </Route>
        <Route path="/about">
          <h1>О компании</h1>
        </Route>
      </Switch>
    </Router>
  );
};

Теперь, когда пользователь находится на определенной странице, соответствующая ссылка будет иметь CSS-класс active-link. Красиво и удобно!

Параметры компонента NavLink

Кроме параметров Link, у NavLink есть дополнительные свойства:

  1. activeClassName — имя CSS-класса для активной ссылки.
  2. activeStyle — объект со стилями для активной ссылки.
  3. exact — указывает, что ссылка должна быть активна только при полном совпадении пути.
  4. isActive — функция для более сложной логики определения активного состояния.

Пример с activeStyle:

<NavLink 
  to="/contact"
  activeStyle={{ fontWeight: 'bold', color: 'red' }}
>
  Контакты
</NavLink>

Сравнение Link и NavLink

Возможность Link NavLink
Переход между страницами
Стилизация активного состояния
Простой в использовании
Подходит для навигационных меню

Используйте Link для ссылки, где не нужно отслеживать активное состояние, а NavLink — для навигационных меню, где пользователь должен видеть, на какой странице он находится.

Создание навигационного меню

Давайте сделаем полноценное меню для нашего небольшого приложения:

import React from 'react';
import { BrowserRouter as Router, Route, Switch, NavLink } from 'react-router-dom';

export const App: React.FC = () => {
  return (
    <Router>
      <header>
        <nav>
          <NavLink to="/" exact activeClassName="active" className="nav-link">
            Главная
          </NavLink>
          <NavLink to="/about" activeClassName="active" className="nav-link">
            О нас
          </NavLink>
          <NavLink to="/contact" activeClassName="active" className="nav-link">
            Контакты
          </NavLink>
        </nav>
      </header>
      <main>
        <Switch>
          <Route exact path="/">
            <h1>Добро пожаловать на главную страницу!</h1>
          </Route>
          <Route path="/about">
            <h1>Страница "О нас"</h1>
          </Route>
          <Route path="/contact">
            <h1>Страница "Контакты"</h1>
          </Route>
        </Switch>
      </main>
    </Router>
  );
};

И в CSS добавим немного магии:

.nav-link {
  text-decoration: none;
  margin: 0 10px;
  color: black;
}

.nav-link.active {
  font-weight: bold;
  color: blue;
}

Теперь ваше меню выглядит прилично, а активные ссылки легко выделяются.

Типичные ошибки и как их избежать

🚩 Ошибка 1: использование <a> вместо Link или NavLink.
Исправление простое: просто замените <a> на Link и не забудьте про to.

🚩 Ошибка 2: отсутствие exact в NavLink для корневого маршрута /.

Когда вы используете NavLink с корневым маршрутом /, он может считаться активным и для всех дочерних маршрутов. Чтобы избежать этого, добавляйте атрибут exact.

🚩 Ошибка 3: стилизовать ссылки, игнорируя классы или стили от NavLink.
Если не используете activeClassName или activeStyle, сложно будет понять, какая страница активна.

Теперь вы готовы создавать навигацию с помощью Link и NavLink. Их использование не только улучшает пользовательский опыт, но и делает ваш код чище и современнее. Вперёд, к созданию прекрасных приложений!

1
Задача
Модуль 3: React, 9 уровень, 5 лекция
Недоступна
Реализация базовой навигации с использованием Link
Реализация базовой навигации с использованием Link
1
Задача
Модуль 3: React, 9 уровень, 5 лекция
Недоступна
Навигационное меню с активным состоянием с NavLink
Навигационное меню с активным состоянием с NavLink
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ