react-router Uncaught TypeError: Cannot read property 'toUpperCase' of undefined

react-router Uncaught TypeError: Cannot read property 'toUpperCase' of undefined

我正在尝试使用 react-router 但是当我写一个简单的路由时不起作用并且控制台显示 Uncaught TypeError: Cannot read 属性 'toUpperCase' of undefined.

否则当我在没有运行良好的 react-router 的情况下使用时

var React = require('react');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;

var App = React.createClass({
    render: function () {
        return (
            <div>Hello World</div>
        );
    }
});


React.render((
  <Router>
    <Route path="/" component={App} />
  </Router>
), document.body);

错误来自反应库的这一行

function autoGenerateWrapperClass(type) {
  return ReactClass.createClass({
    tagName: type.toUpperCase(), //<----
    render: function() {
      return new ReactElement(
        type,
        null,
        null,
        null,
        null,
        this.props
      );
    }
  });
}

我的猜测是当 React.render 执行时,路由器还不存在。试试这个

 var routes = (
  <Route handler={App}>
  </Route>
);

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

尝试 <Route> 而不是 React.render() 中的 <Router>

我仍在思考 react-router,但我首先要检查的是您使用的版本和您引用的文档。我能够通过执行以下操作使其正常工作...

var React = require('react');
var ReactRouter = require('react-router');
var Route = ReactRouter.Route;

var App = React.createClass({
    render: function () {
        return (
            <div>Hello World</div>
        );
    }
});

var routes = (
    <Route handler={App}>
    </Route>
);

window.onload = function() {
    ReactRouter.run(routes, ReactRouter.HistoryLocation, function(Root, state) {
        React.render(
            <Root />,
            document.getElementById('main')
        )
    });
};

基本上是 PhInside 所说的,但包含在 window.onload

您使用的示例来自 1.0 Beta 文档,但您可能 运行 最新的稳定版本 (0.13)。 master 中的文档来自 1.0 Beta,这就是混乱的根源。

阅读最新稳定版本的文档:https://github.com/ReactTraining/react-router/tree/master/docs