不变式失败:您不应该在 <Router> 之外使用 <Link>

Posted

技术标签:

【中文标题】不变式失败:您不应该在 <Router> 之外使用 <Link>【英文标题】:Invariant failed: You should not use <Link> outside a <Router> 【发布时间】:2020-08-04 11:28:28 【问题描述】:

我的测试出错了:

不变式失败:您不应在 &lt;Router&gt; 之外使用 &lt;Link&gt;

对此我能做些什么?

      483 |     state,
      484 |   ) =>  
    > 485 |     const component = mount(<Testrun  ...props />);
          |                       ^
      486 |     return component;
      487 |   ;
      488 |   it('should have an input for the username', function () 

【问题讨论】:

【参考方案1】:

必须有一个组件应用在组件之外。因此,您收到以下错误: 不变量失败:您不应该在 . 之外使用。

在组件内部移动组件。

【讨论】:

【参考方案2】:

在实际项目中,您的 &lt;Testrun&gt; 嵌套在某个父级中,并且该父级也被某些父级包裹,其中一些父级还具有 &lt;BrowserRouter&gt;&lt;HashRouter&gt;。 它们提供了&lt;Link&gt; 所需的上下文(我指的是 React 的 Context API)。

因此,您需要在测试中使用一些路由器版本。就像

一样简单
const component = mount(<MemoryRouter><Testrun  ...props /></MemoryRouter>);

您可以使用任何其他路由器,但 MemoryRouter 在测试中特别有用,因为它易于配置和控制。

【讨论】:

【参考方案3】:

你必须在 Router 的子节点中创建 Link 标签

【讨论】:

以上是关于不变式失败:您不应该在 <Router> 之外使用 <Link>的主要内容,如果未能解决你的问题,请参考以下文章

错误:不变量失败:您不应该在 <Router> 之外使用 <Link> 进行反应

React 测试库不变量失败:您不应该在 <Router> 之外使用 <Route>

不变违规:您不应该在 <Router> 之外使用 <Switch>

不变违规:您不应该在 <Router> 之外使用 withRouter() (使用最少的工作示例)

使用 Enzyme 测试 React 组件时出错:'不变违规:您不应在 <Router> 外使用 <Link>'

从共享组件库导出`react-router`重定向