当前位置: 首页 > 知识库问答 >
问题:

React router TypeError:\u this.props.history未定义

岳迪
2023-03-14

我使用的反应路由器与反应js和我下面他们的留档,但面临这个错误

编译时会显示错误,

TypeError: _this.props.history is undefined

这是我的index.js文件

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import { Router, Route, browserHistory, IndexRoute } from 'react-router';

ReactDOM.render(
  <Router history={browserHistory}>
    <Route path="/" component={App}>

    </Route>
  </Router>
  ,
  document.getElementById('root')
);

这是我的App.js档案

import React, { Component } from 'react';
import './App.css';

class App extends Component {
    constructor(props){
        super(props);

        this.state = {
            headerText: "Props from Header.",
            contentText: "Props from content."
        };
    }
    render() {
        return (
          <div className="App">
            <ul>
                <li><a href="">Home</a></li>
                <li><a href="">Home</a></li>
                <li><a href="">Home</a></li>
            </ul>
          </div>
        );
    }
}

export default App;

共有3个答案

翁心思
2023-03-14

你在使用npm吗?我的package.json中的“^4.0.0”与“react router”有相同的问题。将其更改为“react router”:“^3.0.2”解决了我的问题。

蒋鸿文
2023-03-14

对我来说解决办法就是改变

1) 组件作为子组件

<Route path="/path">
 <MyComponent/>
</Route>

2) 组件作为“组件”道具

<Route path="/path" component={MyComponent}>
</Route>

在这两种方式中它都呈现,所以对我来说非常混乱,在示例中,它们提供的代码与第一个示例中相同。(我当时使用的是“react router dom”包的5.1.2版)。

使现代化

您也可以使用这种方式(对于子组件(MyComponent的子组件)仅适用于此)

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

const componentClassWithHistory = withRouter(ChildComponent);
export {componentClassWithHistory as ChildComponent};

或用于默认导出

export default withRouter(ChildComponent)

或用于打印脚本

const componentClassWithHistory = (withRouter(ChildComponent as any) as any);
export {componentClassWithHistory as ChildComponent};

来源:https://reacttraining.com/react-router/core/api/withRouter

希望它能帮助别人。

闾丘树
2023-03-14

这是因为从4.0.0开始,React路由器发生了变化。当您使用browserHistory时,现在应该从react router dom包中使用BrowserRouter。因此,您的代码如下所示:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import { BrowserRouter, Route } from 'react-router-dom';

ReactDOM.render(
    <BrowserRouter>
        <Route path="/" component={ App }/>
    </BrowserRouter>, document.getElementById('root')
);

当然,您需要首先安装react-router-dom

还请注意,如果您使用多个路由元素,则必须使用开关,如本答案中所述。

 类似资料:
  • 问题内容: 注意:根据 ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。 现代浏览器正确地实现了这一点。 例如:Safari 5.1,Firefox 7,Chrome 20等。 Undefined仍可在以下位置更改:Chrome 14,… 原来,问题的原因是 如果“对象”中没有属性“ x”,则返回false。 我通过在两个Facebook函数中用规则相等

  • 问题内容: 我正在使用PHP版本5.3并尝试在我的代码中使用,但是出现错误: 我仍然可以连接到数据库。为什么不可用? 我正在使用PHP版本5.3。 问题答案: 更新 中提到的评论,一直以来5.5弃用: 自PHP 5.5起不推荐使用mysql扩展。应该改用mysqli或PDO扩展名。否决已在mysql_deprecation中确定,可以在此找到对该决定背后原因的讨论。 并 在PHP 7中删除 。 是

  • 问题内容: 我有一个简单的jquery click事件 以及在site.master中定义的jquery引用 我检查了脚本是否已正确解析,可以在Firebug中查看标记并直接查看脚本,因此必须找到我。但是,我仍然得到: $未定义 而且没有一个jQuery的作品。我还尝试了$(document).ready和jQuery等的各种变体。 这是.net 3.5上的MVC 2应用程序,我确定我真的很密集,

  • 问题内容: 我收到此错误消息, 这是我的标题。 以下是我的JavaScript代码 以下是HTML 我想在输入标签上显示日期选择器。 我正在使用Bootstrap V3.1。 问题答案: 在使用$或jQuery的脚本之前 添加jQuery库 , 以便可以在脚本中标识$。

  • null 下面是我的代码摘要: 和我的表格

  • 问题内容: 我一直看到说使用=>或.bind(this)的答案,但这些解决方案均无效。 解: 问题答案: 当你 与ES2015类语法,你需要你的动作处理程序绑定到你的类的上下文。 试试这个: 通常,最好不要在其中使用箭头函数或方法,因为它会在每次调用时生成该函数的新副本。将函数声明移到。 我个人更喜欢在这种情况下使用箭头函数作为类属性 它不是ES2015规范的一部分,但babel stage-0预

  • 问题内容: 我正在尝试遵循有关NodeJ的教程。我不认为我会错过任何事情,但是每当我调用时,我得到的唯一值就是不确定的。根据我的研究,默认值应为“开发”。如何动态设置此值以及最初在哪里设置? 问题答案: process.env是对您的环境的引用,因此您必须在此处设置变量。 在Windows中设置环境变量: 在OS X或Linux上:

  • 问题内容: 我正在尝试使用nodejs / mongoose从mongodb获取结果。 错误: 问题答案: 请注意,这是MongoDB的一部分,在您的情况下不可用。您应该使用,而不是和MongoDB的驱动器(如猫鼬ORM,你正在使用)将采取之间照顾类型转换和幕后。