reactjs - 如何在 ReactJS 中获取当前路径
问题描述
我需要在路由更改时获取 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;
所以我需要做的是:
对于每次Route
更改,我都需要更新值location
并进行条件渲染,并将该值(路径)Homepage
也作为prop
任何想法,任何人?
解决方案
您正在重新定义location
:
const [location, setLocation] = useState("");
// ---^^^^^
将其更改为其他内容。
而且您不需要仅为 useLocation 定义其他函数。你可以像这样使用它:
function App() {
const location = useLocation()
// ...
useEffect(() => {
console.log(location.pathname)
}, [location])
编辑:
如果即使在这之后你得到错误,那么你的 react-router 版本可能不是最新的或者不是已经useLocation
定义的。尝试以下操作:
删除
react-router
,react-router-dom
从package.json
删除 node_modules 以使缓存清晰:
rm -rf node_modules/
- 再次尝试安装它们:
npm install react-router react-router-dom
- 重新运行应用程序:
npm start
编辑2:
检查这个问题告诉我们,我们不能在将 BrowserRouter 放入树的同一组件中使用任何钩子。
将您的 BrowserRouter 移出该组件。它可以进入 ReactDOM.render()
因此,您将需要定义您渲染的 BrowserRouter。index.js
.
查看这篇文章了解更多详情。
推荐阅读
- python - SyntaxError:无法分配给 Python 中的函数调用
- python - 尝试使用有效负载发布请求获取数据
- xamarin - Xamarin UWP:选择器在选择 string.empty 时显示类名
- spring-boot - 引起:java.security.cert.CertificateException:没有主题替代 DNS 名称匹配
- python - Django中的ImportError循环依赖
- java - 在 IBM MQ (Java) 中,如何最好使用 PCF 访问给定队列管理器下的所有队列?
- aws-lambda - 如何从 AWS Lambda 调用 Lambda 授权 API Gateway 端点
- android - 在我的 android 应用程序中滚动列表视图时,数据正在消失。我在片段中使用列表视图
- python - 压缩 netcdf 文件中的数组
- java - java - 如何在java中比较并获得预期结果的excel表?