我正在尝试在我的应用上实现react-router。我的主文件包含以下代码:
'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);
});
}
在我的 App 组件中,我有以下代码:
render() {
return (
<div className="App">
<RouteHandler />
</div>
);
}
此代码生成以下错误:
TypeError: Cannot call method 'getRouteAtDepth' of undefined
at RouteHandler.createChildRouteHandler
如果我将<RouteHandler />
更改为直接<ContentPage />
,则代码可以正常运行。
知道我做错了什么吗?
修改: 显然,我正在使用&#34; React starter kit&#34;,这会呈现&#34; App&#34;服务器上的组件也是如此。将react-router添加到该组件时,会产生此(服务器端)错误。
我的项目不需要服务器端渲染,因此删除它解决了我的问题。我会试着调查为什么这会在我有空的时候发生。
答案 0 :(得分:0)
尝试将您的router
移动到App
组件模块中,如下所示:
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方式重构,我希望它能为您提供帮助。