繁体   English   中英

我如何知道我是否在 React 路由器中?

[英]How do I know if I am inside a React router?

我正在开发一个呈现各种链接的 web 浏览器扩展。 这些链接可以在“应用程序”路径(扩展程序中的app.html )内呈现,也可以从浏览器操作 window(菜单栏中的扩展程序按钮)呈现。

该应用程序定义了一个 React 路由器; 弹出窗口没有。

当我在应用程序本身中呈现链接时,我可以使用:

import { Link } from 'react-router-dom';

// ...

<Link to={...}>Foo</Link>

但是,在弹出窗口本身中,这不起作用,因为我收到错误:

Invariant failed: You should not use <Link> outside a <Router>

这当然是有道理的。 但是我想通过帮助程序 function 或组件创建链接,我如何确定我当前是否在路由器“内部”?

请注意,原则上我可以传递一个明确告诉组件它是否是路由器的一部分的道具,但这似乎非常冗长。

您可以通过尝试使用useHistory钩子获取历史 object 来确定层次结构中是否有路由器组件

import { useHistory } from 'react-router-dom';
const Comp = () => {
    const history = useHistory();

    if(!history) {
       // no router in hierarchy
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM