🙈
React
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Введення в React
      • Веб-застосунки
      • Бібліотека React
      • Інструменти
      • Створення і клонування своєї збірки React на базі Create React App
      • Елементи в React
      • JSX
      • Компоненти
      • Рендер за умовою
      • Колекції
    • 2️⃣Стилізація
      • Вбудовані стилі
      • Ванільний CSS
      • CSS модулі
      • Стилізовані компоненти
      • Нормалізація стилів
    • 3️⃣Події та стан
    • 4️⃣Форми
      • Formik
      • Yup валідація форм Formik
    • 5️⃣Життєвий цикл
    • 6️⃣HTTP-запити
    • 7️⃣React-хуки
    • 8️⃣Контекст та рефи
    • 9️⃣Маршрутизація
      • Маршрутизація
      • Компонент <BrowserRouter>
      • Компоненти <Route> та <Routes>
      • Компоненти <Link> та <NavLink>
      • URL-параметри
      • Вкладені маршрути
      • Індексні маршрути
      • Програмна навігація
      • Рядок запиту
      • Обʼєкт місцезнаходження
      • Розподілення коду
    • 🔟Redux Toolkit
      • Управління станом
    • 🕚Асинхронний Redux
    • Бібліотека Redux Persist для роботи з localstorage
    • Помилка non-serializable value і її виправлення
    • переключення теми
    • 👷Практика
  • Про мене
    • Про мене
Powered by GitBook
On this page
  • Хук useNavigate
  • Компонент Navigate
  1. Теорія
  2. Маршрутизація

Програмна навігація

Компоненти Link та NavLink використовують, коли потрібно переміститися за іншим маршрутом при натисканні посилання.

Утім бувають випадки, коли потрібно здійснити переміщення на інший маршрут тільки при виконанні певної послідовності операцій і тільки у разі їх коректного виконання. Наприклад, при натисканні на кнопку авторизації спочатку зробити HTTP-запит на сервер, отримані дані записати в стейт, і тільки після цього у разі успішної авторизації перенаправити користувача на якийсь інший маршрут.

Хук useNavigate

Хук useNavigate надає функцію navigate якій під час виклику передають шлях, куди необхідно виконати навігацію. Цей спосіб імперативний, більш гнучкий і вимагає менше коду.

src/pages/Login.jsx
import { useNavigate } from "react-router-dom";

export const Login = () => {
  const navigate = useNavigate();

  const handleSubmit = async values => {
    const response = await FakeAPI.login(values);
    if (response.success) {
      navigate("/profile", { replace: true });
    }
  };

  return (
    <div>
      <h1>Login page</h1>
      <form onSubmit={handleSubmit} >
      // form content
      </form>
    </div>
  );
};

Другий аргумент функції navigate - обʼєкт. Він не обовʼязковий. У ньому є властивість replace яка за замовченням має значення false. Якшо встановити його значення в true, то він перезапише стек історії. Це використовують досить рідко, зазвичай під час проходження через форму авторизації, щоб не можна було повенутися кнопкою "назад" на сторінку авторизації, бо користувач вже авторизований. Утім цей функціонал можна реалізувати й іншими способами, які будуть розглянуті таді в конспекті.

Компонент Navigate

Другий спосіб використання навігації - компонент Navigate. Це - обгортка над хуком useNavigate. Він виконує навігацію в момент рендерингу. Шлях і додаткові параметри передають за допомогою prop. Такий код декларативніший, менш гнучкий і містить більше коду.

src/pages/Login.jsx
import { Navigate, useState } from "react-router-dom";

export const Login = () => {
  const [isLoginSuccess, setIsLoginSuccess] = useState(false);

  const handleSubmit = async values => {
    const response = await FakeAPI.login(values);
    setIsLoginSuccess(response.success);
  };

  if (isLoginSuccess) {
    return <Navigate to="/profile" replace />;
  }

  return (
    <div>
      <h1>Login page</h1>
      <form onSubmit={handleSubmit} >
      // form content
      </form>
    </div>
  );
};

Який спосіб навігації обрати - залежить від задачі та уподобань розробника. Більш вживаний все ж таки - перший варіант.

PreviousІндексні маршрутиNextРядок запиту

Last updated 1 year ago

📚
9️⃣