加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – React Warning:失败的上下文类型:在`Component`中

发布时间:2020-12-15 20:50:42 所属栏目:百科 来源:网络整理
导读:我正在尝试测试一个React组件,它需要与app.js分开的react-router. 我有一个使用mixin Router.Navigation进行重定向的组件,如下所示: var React = require('react'),Router = require('react-router');var Searchbar = React.createClass({ mixins : [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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读