Програмна навігація
Компоненти Link та NavLink використовують, коли потрібно переміститися за іншим маршрутом при натисканні посилання.
Утім бувають випадки, коли потрібно здійснити переміщення на інший маршрут тільки при виконанні певної послідовності операцій і тільки у разі їх коректного виконання. Наприклад, при натисканні на кнопку авторизації спочатку зробити HTTP-запит на сервер, отримані дані записати в стейт, і тільки після цього у разі успішної авторизації перенаправити користувача на якийсь інший маршрут.
Хук useNavigate
Хук useNavigate надає функцію navigate якій під час виклику передають шлях, куди необхідно виконати навігацію. Цей спосіб імперативний, більш гнучкий і вимагає менше коду.
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
Другий спосіб використання навігації - компонент Navigate. Це - обгортка над хуком useNavigate. Він виконує навігацію в момент рендерингу. Шлях і додаткові параметри передають за допомогою prop. Такий код декларативніший, менш гнучкий і містить більше коду.
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>
);
};
Який спосіб навігації обрати - залежить від задачі та уподобань розробника. Більш вживаний все ж таки - перший варіант.
Last updated