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

Fak*_*ish 20 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'));
Run Code Online (Sandbox Code Playgroud)

文件似乎没有错,有人可以帮助我吗?

哪里有错误

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

kum*_*303 33

您发布的错误很神秘,但这意味着您正在尝试从不是真实组件的变量中渲染组件.例如,您可以执行此操作并获得相同类型的错误:

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

在您发布的代码中,<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'));
Run Code Online (Sandbox Code Playgroud)

  • 我看到这个错误,因为我没有导出组件,我试图使用它.一旦我知道错误的含义,很容易找到,谢谢. (2认同)

Swa*_*ule 17

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


mar*_*cel 3

更改 require 语句:

var React = require('react');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
Run Code Online (Sandbox Code Playgroud)