簡體   English   中英

React Router DOM 監聽路由變化

[英]React Router DOM listen for Route changes

我的 React 應用程序位於一個 java struts 項目中,其中包括一個 header。該 header 中有一個特定元素會根據所命中的某些路由而變化。

為此,在定義我的路由的位置更改路由時收聽會簡單得多。 而不是在每條路線上都這樣做。

這是我的

應用程序.js

import {
  BrowserRouter as Router,
  Route,
  useHistory,
  useLocation,
  Link
} from "react-router-dom";

const Nav = () => {
  return (
    <div>
      <Link to="/">Page 1 </Link>
      <Link to="/2">Page 2 </Link>
      <Link to="/3">Page 3 </Link>
    </div>
  );
};

export default function App() {
  const h = useHistory();
  const l = useLocation();

  const { listen } = useHistory();

  useEffect(() => {
    console.log("location change");
  }, [l]);

  useEffect(() => {
    console.log("history change");
  }, [h]);

  h.listen(() => {
    console.log("history listen");
  });

  listen((location) => {
    console.log("listen change");
  });

  return (
    <Router>
      <Route path={"/"} component={Nav} />
      <Route path={"/"} component={PageOne} exact />
      <Route path={"/2"} component={PageTwo} exact />
      <Route path={"/3"} component={PageThree} exact />
    </Router>
  );
}

單擊 Nav 組件中的鏈接時,不會命中任何控制台日志。 有沒有解決的辦法?

我有一個CodeSandbox來測試這個問題。

請記住, react-router-dom將導航 object 傳遞到 React 樹下。

您正在嘗試訪問 App 組件中的歷史記錄和位置,但是 App 組件“上方”沒有任何內容可以為其提供歷史記錄或位置。

如果您改為將useLocationuseHistory放在 PageOne/PageTwo/PageThree 組件中,它會按預期工作。

更新了您的代碼和框:

https://codesandbox.io/s/loving-lamarr-bzspg?fontsize=14&hidenavigation=1&theme=dark

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM