当前位置: 首页 > 知识库问答 >
问题:

如何在ReactJS中获取当前路径

訾高明
2023-03-14

我需要得到当前路径的url在路由更改和基于值我想做条件渲染

这是我的代码,我没有继续的想法。

import React, { useRef, useEffect, useState } from "react";
import "./App.css";
import "./css/custom.css";

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

import NavigationBar from "./pages/homepage-components/1-navbar";
import HomePage from "./pages/HomePage";
import Post from "./pages/Post";

function NavigationHeader() {
  const location = useLocation();
  return location.pathname;
}

function App() {
  const [location, setLocation] = useState("");

  const mounted = useRef();
  useEffect(() => {
    if (!mounted.current) {
      // do componentDidMount logic
      let val = NavigationHeader; // this part return the function, even tried NavigationHeader(), but no luck
      alert(val);
      mounted.current = true;
    } else {
      // do componentDidUpdate logic
    }
  });

  return (
    <Router>
      {/* --------------- Navigation Bar --------------- */}
      {location === "/" ? <NavigationBar /> : null}
      

      {/* --------------- End of Navigation Bar --------------- */}
      <Switch>
        <Route exact path="/" component={() => <HomePage isroot={location} />} />
        <Route path="/post" component={Post} />
      </Switch>
    </Router>
  );
}

export default App;

所以我需要做的是:

对于每个路线更改,我需要更新位置的值,并进行条件渲染,并将该值(路径)作为道具也传递到主页组件

有什么想法吗?


共有1个答案

慕乐池
2023-03-14
匿名用户

您正在重新定义位置:

const [location, setLocation] = useState("");
// ---^^^^^

把它换成别的东西。

您不需要仅为useLocation定义其他函数。您可以像这样使用它:

function App() {
  const location = useLocation()
  // ...
  useEffect(() => {
    console.log(location.pathname)
  }, [location])

编辑:

如果即使在这之后,你得到了错误,那么可能你的反应路由器版本不是最新的,或者不是定义了usePlace的版本。尝试以下内容:

>

  • package.json

    删除节点_模块以提高缓存清晰度:

    rm-rf节点\u模块/

    npm安装react路由器react路由器dom

    npm启动

    编辑2:

    检查这个问题告诉我们,我们不能在将BrowserRouter放入树的同一组件中使用任何挂钩。

    将BrowserRouter移出该组件。它可以放在ReactDOM.render()中

    因此,您需要在渲染ie的位置定义BrowserRouter。index.js

    查看此帖子了解更多详细信息。

  •  类似资料:
    • 问题内容: 在实现持久性底部栏时,单击底部栏中的按钮时,需要恢复以前的路线。 单击底部栏中的按钮时,将保存其当前路径路径(/ a / b / c ),并根据该按钮单击恢复先前保存的路径。 从概念上讲,用户会将每个按钮视为一个工作区,并且其状态永远不会丢失(包括后退堆栈)。用户可以安全地从一个工作区切换到另一个工作区。 当路由重绕到根时,如何在Flutter中获取当前路由路径? 问题答案: 不会公开

    • 在实现持久底部栏时,当单击底部栏中的按钮时,需要恢复以前的路由。 单击底部栏中的按钮时,会保存其当前路线路径(/a/b/c ),并根据按钮的单击恢复先前保存的路线。 从概念上讲,用户会认为每个按钮都是一个工作区,其状态永远不会丢失(包括后退堆栈)。用户可以安全地从一个工作区切换到另一个工作区。 当路由重绕到根时,如何在Flutter中获取当前路由路径?

    • 当前文档只讨论获取路由参数,而不是实际的路由段。 例如,如果我想找到当前路由的父级,怎么可能?

    • 问题内容: 如何在Symfony 2中获得当前路线? 例如: 我如何获得该价值? 问题答案: 从ContainerAware(例如控制器)中:

    • 问题内容: 我在代码中的某个地方遇到了异常,但是可以在应用程序启动时安全地导入相同的模块。我很好奇,看看Python寻找要导入模块的路径,以便我能够追踪为什么会出现此问题。我找到了这个: 这是系统在尝试导入模块时查找的所有路径的列表吗? 问题答案: python默认检查的路径位置可以通过check检查。

    • 我有一个路由器像下面: 以下是我想要实现的目标: 如果未登录,将用户重定向到 如果用户在登录后试图访问,请将其重定向到root 因此,现在我尝试在