React-router:type.toUpperCase不是一个函数

时间:2015-06-16 13:09:45

标签: javascript reactjs react-router

当我第一次使用react-router时,但是页面在下面给出了这个错误

React-router:type.toUpperCase不是函数

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

var Route = Router.Route;

var App = React.createClass({

  render: function() {
    return (
      <div>App</div>
    );
  }
});

React.render((
  <Router>
    <Route path="/" component={App} />
  </Router>
), document.getElementById('app'));
文件似乎没有错,有人可以帮助我吗?

错误来自

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

5 个答案:

答案 0 :(得分:33)

您发布的错误很神秘,但这意味着您尝试使用非真实组件的变量渲染组件。例如,您可以执行此操作并获得相同类型的错误:

render: function() {
  var Thing = {};  // not a component
  return <Thing />;  // same error
}

在您发布的代码中,<Router>映射到作为模块的变量,而不是组件。您可以使用新的变量声明来修复它:

var React = require('react');

var routerModule = require('react-router');
var Router = routerModule.Router;  // component

var Route = routerModule.Route;

var App = React.createClass({

  render: function() {
    return (
      <div>App</div>
    );
  }
});

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

答案 1 :(得分:17)

我得到了同样的错误。然后我发现我在导出组件时出错了。在一个组件中,我编写了module.export而不是module.exports。所以,请检查你是否犯了同样的错误。

答案 2 :(得分:3)

更改require语句:

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

答案 3 :(得分:0)

如果您使用react-router v0.13.3 在路线上替换路线 r , 像这样:

var routes = (
  <Route>
    <Route path="/" component={App} />
  </Route>
);

Router.run(routes, function(Root) {
 React.render(<Root />, document.getElementById('app'));
});

答案 4 :(得分:0)

我有同样的错误,这是圈子依赖。

component1.jsx:

var Component1 = require('./component2.jsx');

component2.jsx:

var Component2 = require('./component1.jsx');

这样看来,这很明显,但是错误消息却很不透明。