2015-04-04 20 views
3

我試圖在我的應用程序上實現react-router。我的主要文件包含以下代碼:反應路由器錯誤 - '不能調用方法'getRouteAtDepth'未定義'

'use strict'; 

import 'babel/polyfill'; 
import React from 'react/addons'; 
import App from './components/App'; 
import ContentPage from './components/ContentPage'; 
import Dispatcher from './core/Dispatcher'; 
import AppActions from './actions/AppActions'; 
import Router from 'react-router'; 

var { Route, RouteHandler, Link } = Router; 

function run() { 

    var routes = (
    <Route name="app" path="/" handler={App}> 
     <Route handler={ContentPage}/> 
    </Route> 
); 

    Router.run(routes, function (Handler) { 
    React.render(<Handler/>, document.body); 
    }); 

} 

裏面我應用組件我有這樣的代碼:

render() { 
    return (
     <div className="App"> 
     <RouteHandler /> 
     </div> 
    ); 
    } 

此代碼生成以下錯誤:

TypeError: Cannot call method 'getRouteAtDepth' of undefined 
    at RouteHandler.createChildRouteHandler 

如果我改變<RouteHandler />直接<ContentPage />,代碼有效。 任何想法我做錯了什麼?

編輯: 很顯然,我是用「React starter kit」,這使得在服務器上的「應用程序」組件爲好。將反應路由器添加到該組件時,會產生此(服務器端)錯誤。

我不需要服務器端渲染我的項目,所以刪除這個解決了我的問題。我會盡力調查爲什麼這件事發生在我有空的時候。

+0

您使用的是哪個版本的React? – 2015-04-04 09:36:43

+0

react版本:「0.13.0」,react-router:「0.13.2」 – 2015-04-04 09:58:12

+1

這是怎麼回事:https://github.com/rackt/react-router/issues/720 – WiredPrairie 2015-04-04 12:38:16

回答

0

儘量將您routerApp組件模塊是這樣的:

var React = require('react'), 
    Router = require('react-router'), 
    Route = Router.Route, 
    RouteHandler = Router.RouteHandler, 
    ContentPage = require('./components/ContentPage'), 
    App, routes; 

App = React.createClass({ 
    render: function(){ 
     return (
       <div className="App"> 
        <RouteHandler /> 
       </div> 
     ); 
    } 
}); 

routes = (
    <Route name="app" path="/" handler={App}> 
     <Route handler={ContentPage}/> 
    </Route> 
); 

module.exports = { 
    run: function() { 
     Router.run(routes, function (Handler) { 
      React.render(<Handler/>, document.body) 
     }); 
    } 
}; 

和適當的run模塊將似乎是這樣的:

var AppRunner = require('./component/App'); 
AppRunner.run(); 

只是在你的ES6方式重構這個,我希望它會幫助你。

相關問題