如何使用自定义历史记录对象在我的主要App组件中侦听路线更改?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用自定义历史记录对象在我的主要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
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组件中侦听路线更改?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Facebook Graph API Explorer 发布自定义打开图历史记录
Sencha Touch - 为啥在我的自定义组件中未定义此功能?