当我第一次使用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
);
}
});
}
答案 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');
这样看来,这很明显,但是错误消息却很不透明。