Javascript React.js:Uncaught TypeError:undefined不是函数
我正在学习react.js,并在网上找到了一个教程。我正在学习来自的react/rails教程 在我实现注释表单的最后一步之前,所有代码都运行良好。按照所有说明操作后,我在chrome控制台中发现一个错误,指向这行代码Javascript React.js:Uncaught TypeError:undefined不是函数,javascript,ruby-on-rails,reactjs,Javascript,Ruby On Rails,Reactjs,我正在学习react.js,并在网上找到了一个教程。我正在学习来自的react/rails教程 在我实现注释表单的最后一步之前,所有代码都运行良好。按照所有说明操作后,我在chrome控制台中发现一个错误,指向这行代码var commentNodes=this.props.comments.map(function(comment,index){说它的“Uncaught TypeError:undefined不是函数”。表单显示并接受输入,但在我提交后没有显示任何内容。此外,教程有点过时,它仍在
var commentNodes=this.props.comments.map(function(comment,index){
说它的“Uncaught TypeError:undefined不是函数”。表单显示并接受输入,但在我提交后没有显示任何内容。此外,教程有点过时,它仍在使用React.renderComponent
,我在阅读文档后将其更改为React.render
。是否还有一些不推荐的代码我遗漏了?或者有人能帮助我或告诉我哪里做错了?
提前谢谢
var Comment = React.createClass({
render: function () {
return (
<div className="comment">
<h2 className="commentAuthor">
{this.props.author}
</h2>
{this.props.comment}
</div>
);
}
});
var CommentList = React.createClass({
render: function () {
var commentNodes = this.props.comments.map(function (comment, index) {
return (
<Comment author={comment.author} comment={comment.comment} key={index} />
);
});
return (
<div className="commentList">
{commentNodes}
</div>
);
}
});
var CommentBox = React.createClass({
getInitialState: function () {
return {comments: []};
},
componentDidMount: function () {
this.loadCommentsFromServer();
},
loadCommentsFromServer: function () {
$.ajax({
url: this.props.url,
dataType: 'json',
success: function (comments) {
this.setState({comments: comments});
}.bind(this),
error: function (xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
handleCommentSubmit: function(comment) {
var comments = this.state.comments;
var newComments = comments.concat([comment]);
this.setState({comments: newComments});
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'POST',
data: {"comment": comment},
success: function(data) {
this.loadCommentsFromServer();
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
render: function () {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList comments={this.state.comments} />
<CommentForm onCommentSubmit={this.handleCommentSubmit}/>
</div>
);
}
});
var CommentForm = React.createClass({
handleSubmit: function() {
var author = this.refs.author.getDOMNode().value.trim();
var comment = this.refs.comment.getDOMNode().value.trim();
this.props.onCommentSubmit({author: author, comment: comment});
this.refs.author.getDOMNode().value = '';
this.refs.comment.getDOMNode().value = '';
return false;
},
render: function() {
return (
<form className="commentForm" onSubmit={this.handleSubmit}>
<input type="text" placeholder="Your name" ref="author" />
<input type="text" placeholder="Say something..." ref="comment" />
<input type="submit" value="Post" />
</form>
);
}
});
var ready = function () {
React.render(
<CommentBox url="/comments.json" />,
document.getElementById('comments')
);
};
$(document).ready(ready);
var Comment=React.createClass({
渲染:函数(){
返回(
{this.props.author}
{this.props.comment}
);
}
});
var CommentList=React.createClass({
渲染:函数(){
var commentNodes=this.props.comments.map(函数(注释,索引){
返回(
);
});
返回(
{commentNodes}
);
}
});
var CommentBox=React.createClass({
getInitialState:函数(){
返回{注释:[]};
},
componentDidMount:函数(){
this.loadCommentsFromServer();
},
loadCommentsFromServer:函数(){
$.ajax({
url:this.props.url,
数据类型:“json”,
成功:功能(评论){
this.setState({comments:comments});
}.绑定(此),
错误:函数(xhr、状态、错误){
console.error(this.props.url,status,err.toString());
}.绑定(此)
});
},
handleCommentSubmit:函数(注释){
var注释=this.state.comments;
var newComments=comments.concat([comment]);
this.setState({comments:newComments});
$.ajax({
url:this.props.url,
数据类型:“json”,
键入:“POST”,
数据:{“注释”:注释},
成功:功能(数据){
this.loadCommentsFromServer();
}.绑定(此),
错误:函数(xhr、状态、错误){
console.error(this.props.url,status,err.toString());
}.绑定(此)
});
},
渲染:函数(){
返回(
评论
);
}
});
var CommentForm=React.createClass({
handleSubmit:function(){
var author=this.refs.author.getDOMNode().value.trim();
var comment=this.refs.comment.getDOMNode().value.trim();
this.props.onCommentSubmit({作者:作者,评论:评论});
this.refs.author.getDOMNode().value='';
this.refs.comment.getDOMNode().value='';
返回false;
},
render:function(){
返回(
);
}
});
var ready=函数(){
反应(
,
document.getElementById('comments')
);
};
$(文件)。就绪(就绪);
可能的原因是返回的注释不是数组。在此行之前执行控制台.log(comments)
或调试器;
:this.setState({comments:comments});
检查ajax响应并查看注释是否是注释数组。如果不是数组,那么这就是您的问题所在,您可以暂时将一些模拟数据放在其中,直到可以使用为止。您是否有服务器设置返回包含名为注释列表的JSON数据对象?@ChrisHawkes谢谢或者您的回复。我检查了我的控制器等,结果是该应用程序只缺少一个单词。响应
,请参阅下面的答案。谢谢!谢谢!您的响应帮助了我。我能够更好地调试我的问题,结果它被设置了两次,我需要在代码中添加响应
。this.setState({comments:response.comments});
我的一位同事向我指出了这一点。再次感谢!乔纳森,当我获得足够的声誉时,我会回来投票支持你的答案。干杯!