一卷旌收千骑虏,万全身出百重围。这篇文章主要讲述如何使用自定义历史记录对象在我的主要App组件中侦听路线更改?相关的知识,希望能为你提供帮助。
我的标题出现在网站的95%页面中,因此我将其安装在主要的App组件中。对于其余5%的页面,尽管我需要将其删除。
我想出了一种好方法,那就是根据当前路由将状态从true更改为false,并且该状态将确定是否安装标头。
起初,我尝试仅使用window.location.href
作为useEffect
依赖项,但这似乎不起作用。我已经阅读了有关侦听历史记录位置的选项,但是我一直收到Cannot read property 'history' of undefined
。我觉得这可能是因为我使用的是自定义历史记录组件,还是因为我试图在主App组件中使用它?不确定。
这是我的历史记录对象:
import { createBrowserHistory } from 'history';
export default createBrowserHistory();
我像这样在
Router
中使用它:<
Router history={history}>
CONDITIONAL COMPONENT<
Switch>
...routes
<
/Switch>
<
/Router>
这是我尝试收听的方式,其中
history
是我的自定义历史记录对象const MyHistory = useHistory(history)useEffect(() =>
{
return MyHistory.listen((location) =>
{
console.log(`You changed the page to: ${location.pathname}`)
})
},[MyHistory])
答案您正在尝试在提供程序
Router
的组件中使用useHistory。为了使useHistory工作,它需要在层次结构中的较高位置有一个Router。因此,您可以用Router包装App组件,例如
export default () =>
(
<
Router history={history}>
<
App />
<
Router>
)
或者因为您定义了自定义历史,所以可以直接使用它而无需使用useHistory
useEffect(() =>
{
return history.listen((location) =>
{
console.log(`You changed the page to: ${location.pathname}`)
})
},[])
另一答案这是我控制应用程序中每条路线更改的方式。我创建了一个侦听
pathname
给定的useLocation属性的组件
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
export default function AppScrollTop() {
const { pathname } = useLocation();
useEffect(() =>
{
console.log(`You changed the page to: ${pathname}`)
}, [pathname]);
return null;
}
然后将组件放入
<
Router>
中>
< BrowserRouter> < AppScrollTop /> < Switch> < Route path="/login" component={Login} /> < /Switch> < /BrowserRouter>
【如何使用自定义历史记录对象在我的主要App组件中侦听路线更改()】我希望这会有所帮助。
推荐阅读
- Android(为什么本机代码比Java代码要快得多)
- 如何使用mockito在安卓系统中创建模拟api响应[关闭]。
- 在android中添加自定义单选按钮
- 如何在Android Studio的菜单应用程序标题栏中的项目之间添加行()
- create-react-app-不能使用npm install
- 如何解决Android许可问题
- 在熊猫中应用```apply()```时出错
- Android导航图继续api调用问题
- Android(WebView-未为会议启用摄像头和麦克风)