我刚刚开始学习React并且遇到了这个错误。
未捕获的TypeError:无法读取属性'路径名'未定义的 在新的路由器
这是我的代码:
var React = require('react');
var ReactDOM = require('react-dom');
var { Route, Router, IndexRoute } = require('react-router');
var hashHistory = require('react-router-redux')
var Main = require('./components/Main');
ReactDOM.render(
<Router history={hashHistory}>
<Route path="/" component={Main}>
</Route>
</Router>,
document.getElementById('app')
);
我以下的教程使用了React-Router 2.0.0,但在我的桌面上我使用的是4.1.1。我尝试搜索更改,但未能找到有效的解决方案。
"dependencies": {
"express": "^4.15.2",
"react": "^15.5.4",
"react-dom": "^15.5.4",
"react-router": "^4.1.1",
"react-router-dom": "^4.1.1",
"react-router-redux": "^4.0.8"
答案 0 :(得分:19)
错误是因为React Router v4中的api完全不同。 你可以试试这个:
import React from 'react';
import ReactDOM from 'react-dom';
import {
BrowserRouter as Router,
Route
} from 'react-router-dom';
const Main = () => <h1>Hello world</h1>;
ReactDOM.render(
<Router>
<Route path='/' component={Main} />
</Router>,
document.getElementById('app')
);
您可以查看documentation以了解它如何运作。
Here我有一个带路由动画的回购。
here您可以找到现场演示。
答案 1 :(得分:9)
我收到了上述错误消息,而且非常神秘。我尝试了所提到的其他解决方案,但它没有用。
原来我不小心忘记将<FileWidget setInputRef={ref => { this.inputRef = ref } ... />
道具包含在其中一个to
组件中。
希望错误消息更好。一个简单的<Link />
或类似的东西会有所帮助。希望这能节省一些遇到同样问题的人。
答案 2 :(得分:4)
我遇到了同样的错误,我通过将history
从2.x.x
更新为4.x.x
npm install history @ latest --save
答案 3 :(得分:1)
我有一个不同的原因,但有相同的错误,因此遇到了这个问题。将其放在此处,以防其他人遇到同样的情况,这可能会有所帮助。
对我来说,问题是我已更新为react-router-4
,并且访问pathname
有所更改。
更改: (React-Router-3及更早版本)
this.props.location.pathname
收件人: (React-Router-4)
this.props.history.location.pathname
答案 4 :(得分:0)
请确保在COMMIT;
上添加to
道具,否则也会出现相同的错误。