Как перехватить кнопку возврата браузера / пролистывание трекпада в React и перенаправить на определенный маршрут вместоJavascript

Форум по Javascript
Ответить
Anonymous
 Как перехватить кнопку возврата браузера / пролистывание трекпада в React и перенаправить на определенный маршрут вместо

Сообщение Anonymous »

Я создаю приложение React с маршрутизацией на стороне клиента.

Когда пользователь перемещается по нескольким страницам, а затем использует кнопку браузера «Назад» (или жест смахивания назад мышью или трекпадом), приложение шаг за шагом возвращается назад по истории.

Чего я хочу

Вместо того, чтобы возвращаться на один шаг назад в истории, я хочу, чтобы пользователь перенаправлялся на определенный маршрут (например, /settings) всякий раз, когда он запускает браузер обратно действие.
Пример сценария

1. /home → /profile → /profile/edit

2. Пользователь нажимает кнопку браузера назад (кнопка мыши/пролистывание)

3. Ожидается: перенаправление на /settings

4. Фактически: возвращается в /profile
Упрощенный пример

Код: Выделить всё

import { useEffect } from "react";
import { useNavigate } from "react-router-dom";

function Page() {
const navigate = useNavigate();

useEffect(() => {
const handlePopState = () => {
navigate("/settings", { replace: true });
};

window.addEventListener("popstate", handlePopState);

return () => {
window.removeEventListener("popstate", handlePopState);
};
}, [navigate]);

return Page;
}
Это частично работает, но:

• Это может вызвать непредвиденную навигацию

• Это мешает нормальному поведению истории браузера
Вопросы

• Как правильно обрабатывать кнопку «Назад» браузера (включая жесты мыши/трекпада) в React?

• Является ли перехват popstate правильным подходом?

• Как это следует реализовать? правильно с React Router?

Подробнее здесь: https://stackoverflow.com/questions/798 ... irect-to-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»