在React中从浏览器处理后退按钮

时间:2017-08-07 09:44:19

标签: javascript reactjs react-router-v4

登录我的仪表板组件后,我不希望用户使用浏览器中的后退按钮返回登录页面。

我没有使用Redux,只使用了React。

2 个答案:

答案 0 :(得分:1)

我认为这将有所帮助,如果用户已登录,则保持在同一页面上。

if(loggedIn) {
  history.pushState(null, null, location.href);
  window.onpopstate = function(event) {
  history.go(1);
  };
}

答案 1 :(得分:0)

我更喜欢使用我的自定义钩子来拦截浏览器的返回导航:

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([我的自定义返回导航处理程序])。