我简化了此问题的代码
我的项目包含以下两个文件:
Comments.jsx
Comments = React.createClass({
render() {
return (
<div className="container">
Hello Comments
</div>
);
}
});
App.jsx
App = React.createClass({
renderComments() {
return <Comments />;
},
render() {
return (
<div>
{this.renderComments()}
</div>
);
}
});
当我运行项目时,我收到以下错误:
警告:React.createElement:type不应为null,未定义, 布尔值或数字。它应该是一个字符串(对于DOM元素)或a ReactClass(用于复合组件)。检查渲染方法
App
异步函数回调中的异常:错误:不变违规: 元素类型无效:期望一个字符串(对于内置组件) 或类/函数(对于复合组件)但得到:对象。校验
App
的渲染方法。
如果我从App.jsx中移除{this.renderComments()}
render()
jsx标记,则所有内容都会重复。
我做错了什么?为什么我不能嵌入<Comments />
?
其他信息
好的,这真的很奇怪。如果我将Comments
的所有实例重命名为Commnt
,将comments
重命名为commnts
,并将文件Comments.jsx重命名为Commnt.jsx
,那么一切正常!!! 即可。我尝试将其重命名为其他任何有效的东西。当我使用单词Comments时,我只会收到此错误。我必须开始驾驶,所以如果评论是保留字或其他什么,我会稍后查阅。
我的meteorjs项目中没有任何其他文件,除了html文件和myhelloworld.jsx
有2个url路由。所以我很确定我知道一个事实我没有在其他任何地方使用评论。
答案 0 :(得分:3)
我在我的meteor项目Comments = new Mongo.Collection("comments");
的mainproject.jsx中有这个。因此,这会导致命名冲突,因为meteor将此变量推送到服务器和客户端。