2017-04-11 138 views
8

尝试使用react v4与redux并运行到此错误,似乎是跟随文档,无法找到任何地方的任何信息,所以我茫然表现:React-Router - 未捕获TypeError:无法读取未定义的属性'route'

Uncaught TypeError: Cannot read property 'route' of undefined

这里是我的代码:

import React, {Component} from 'react'; 
import { 
    BrowserRouter as Router, 
    Route, 
    Link, 
    withRouter 
} from 'react-router-dom' 
import Menu from './Menu'; 
import { connect } from "react-redux"; 
import Play from './Play'; 
class Manager extends Component { 
    render() { 
     return(
      <Router> 
       <div> 
        <Route exact path="/" component={Menu}/> 
        <Route path="/menu" component={Menu}/> 
        <Route path="/play" component={Play}/> 
       </div> 
       </Router> 
     ) 
    } 
} 
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Manager)); 

,这里是完整的错误:

game.js:26838 Uncaught TypeError: Cannot read property 'route' of undefined 
    at Route.computeMatch (game.js:26838) 
    at new Route (game.js:26815) 
    at game.js:15322 
    at measureLifeCyclePerf (game.js:15102) 
    at ReactCompositeComponentWrapper._constructComponentWithoutOwner (game.js:15321) 
    at ReactCompositeComponentWrapper._constructComponent (game.js:15307) 
    at ReactCompositeComponentWrapper.mountComponent (game.js:15215) 
    at Object.mountComponent (game.js:7823) 
    at ReactCompositeComponentWrapper.performInitialMount (game.js:15398) 
    at ReactCompositeComponentWrapper.mountComponent (game.js:15285) 
+0

你尝试从改变'“反应,路由器dom''到'从'react-router''? –

+1

尝试像'react-router''这样的'import {withRouter}'从'react-router'中导入withRouter –

+0

这两种方法都不幸工作。 –

回答

0

你不需要withRouter更高的使用比你的实际路由器是:) 只是将其删除:

export default connect(mapStateToProps, mapDispatchToProps)(Manager); 

您将需要使用withRouter HOC,如果你想访问嵌套在路由组件内部历史信息。你可以在这里找到详细信息:https://reacttraining.com/react-router/web/api/withRouter

+0

这解决了我的问题,它与上面的OP匹配。 –

0

所以我从我的本地服务器上运行它,当我从它运行的webpack服务器上运行它时。

0

我通过我的<Navigation /><Router></Router>

2

改变内部路由器移动到一个所谓的新反应路由器4.0修复了这个使用NPM /纱安装模块“反应路由器-DOM”

“反应路由器-dom“,像这样定义你的路由器..

不要忘记进口。 从'react-router-dom'导入{BrowserRouter,Route};

  <BrowserRouter> 
       <div> 
       <Route exact path="/" component={Menu}/> 
       <Route path="/menu" component={Menu}/> 
       <Route path="/play" component={Play}/> 
       </div> 
      </BrowserRouter> 
+0

如果你仍然有问题随时给我发信息:) –

+0

您好,我得到相同的错误“TypeError:无法读取未定义的属性'路由器'我已经安装react-router-dom模块做npm install react-router-dom并导入模块,并试图通过“this.props.router.push('/#/仪表板')”重定向 –

7

在这里,你正在使用的反应路由器-DOM最新版本4.0.0以上。

因此,没有可用的路由器。您需要在此版本中使用BrowserRouter。

你的代码将

import React, {Component} from 'react'; 
import { 
    Switch, 
Route, 
Link, 
withRouter 
} from 'react-router-dom' 
import Menu from './Menu'; 
import { connect } from "react-redux"; 
import Play from './Play'; 
class Manager extends Component { 
    render() { 
    return(<div> 
     <Switch> 

       <Route exact path="/" component={Menu}/> 
       <Route path="/menu" component={Menu}/> 
       <Route path="/play" component={Play}/> 

      </Switch></div> 
    ) 
} 
} 
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Manager)); 

,并使用BrowserRouter在index.js文件呈现此组件

import { BrowserRouter } from 'react-router-dom'; 
ReactDOM.render((<BrowserRouter><Manager/></BrowserRouter>), document.getElementById('root')); 
相关问题