Обработка кнопки «Назад» из браузера в React

После входа в мой компонент Dashboard я не хочу, чтобы пользователь возвращался на мою страницу входа с помощью кнопки «Назад» в браузере.

Я не использую Redux, а только React.


person Prateek Thapa    schedule 07.08.2017    source источник
comment
Возможный дубликат как остановить кнопку возврата браузера с помощью javascript   -  person Liam    schedule 07.08.2017
comment
Почему бы не перенаправить пользователя на компонент Dashboard, если пользователь уже вошел в систему, в компоненте Login?   -  person glhrmv    schedule 07.08.2017
comment
какое ожидаемое поведение, когда пользователь нажимает кнопку «Назад»?   -  person Maxim Kuzmin    schedule 07.08.2017
comment
Перенаправление на ту же страницу.   -  person Prateek Thapa    schedule 07.08.2017


Ответы (2)


Я думаю, это поможет, если пользователь вошел в систему, а затем останется на той же странице.

if(loggedIn) {
  history.pushState(null, null, location.href);
  window.onpopstate = function(event) {
  history.go(1);
  };
}
person rrr    schedule 07.08.2017
comment
componentDidMount () { const { loggedIn } = this.state; const {история, местоположение} = окно; if (loggedIn) { history.pushState (null, null, location.href); window.onpopstate = событие => { event.preventDefault(); история.го(1); }; } } - person Prateek Thapa; 11.08.2017
comment
для меня он возвращается, а затем возвращается на текущую страницу - person Sujit.Warrier; 27.01.2021

Я предпочитаю использовать свой пользовательский хук для перехвата обратной навигации браузера:

import { useEffect, useRef } from "react";

// Intercepts browser's Navigate Back event
export const useNavigateBack = (callback: Function): void => {
  const isInitialMount = useRef(true);
  
  useEffect(() => {
    if (isInitialMount.current) {
      isInitialMount.current = false;
      
      window.addEventListener('popstate', function(event) {
        window.history.pushState(null, '', document.URL);
        event.stopImmediatePropagation();
        callback();
      }, false);
    } else {
       // In my special case this fix was needeed:
       // window.history.pushState(null, '', document.URL);
    }
  }, [callback]);
}

И теперь я могу вызвать use useNavigateBack([мой пользовательский обработчик обратной навигации]) внутри моего компонента.

person Anton Pegov    schedule 20.01.2021