reactjs – React Warning:失败的上下文类型:在`Component`中没有指定必需的上下文`router`

我正在尝试测试一个React组件,它需要与app.js分开的react-router.

我有一个使用mixin Router.Navigation进行重定向的组件,如下所示:

var React = require('react'),Router = require('react-router');

var Searchbar = React.createClass({

  mixins : [Router.Navigation],searchTerm: function(e) {
    if (e.keyCode !== 13) {
      return;
    }

    this.context.router.transitionTo('/someRoute/search?term=' + e.currentTarget.value)
  },render: function() {
    return (
      <div className="searchbar-container">
        <input type="search" placeholder="Search..." onKeyDown={this.searchTerm} />
      </div>
    )
  }
});

module.exports = Searchbar;

我试图为此写一个测试,但碰到了一堵墙.除了我无法测试转换以便按预期工作之外,我还在我的Jest测试中遇到了此错误消息:

警告:上下文类型失败:未在搜索栏中指定所需的上下文路由器.

有谁知道如何摆脱警告和奖金问题,我如何测试转换是否按预期工作?

我已经在这里和Github上的这个对话进行了研究:https://github.com/rackt/react-router/issues/400是我发现的最接近问题的.看起来我需要单独导出路由器,但这似乎是很多开销只是运行组件测试没有警告la https://github.com/rackt/react-router/blob/master/docs/guides/testing.md

这真的是要走的路吗?

在React Router的0.13版本中,不推荐使用mixins Navigation和State.相反,它们提供的方法存在于对象this.context.router上.这些方法不再被弃用,但如果你明确地使用this.context.router,则不需要mixin(但是你需要直接声明contextTypes);或者,您可以使用mixin,但不需要直接使用this.context.router. mixin方法将为您访问它.

在任何一种情况下,除非您通过React Router(通过Router#run)渲染组件,否则路由器对象不会提供给上下文,当然您也无法调用转换方法.这就是警告告诉你的 – 你的组件希望将路由器传递给它,但它无法找到它.

要单独测试它(不创建路由器对象或通过Router#run运行组件),您可以在组件的上下文中将模拟的路由器对象放在正确的位置,并测试您使用正确的值调用transitionTo.

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...