javascript - react .js : Uncaught TypeError: undefined is not a function

标签 javascript ruby-on-rails reactjs

我正在尝试学习 react.js 并在网上找到了一个教程。我正在关注来自 http://rny.io/rails/react/2014/07/31/reactjs-and-rails.html 的 react/rails 教程

在我执行评论表单的最后一步之前,所有代码都运行良好。按照所有说明操作后,我的 chrome 控制台出现错误,指向这行代码: undefined is not a function”。表单显示并接受输入,但在我提交后没有显示任何内容。此外,教程有点过时,它仍在使用 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);

最佳答案

可能的原因是返回的评论不是数组。在此行之前执行 console.log(comments)debugger;:this.setState({comments: comments}); 来检查你的ajax 响应并查看评论是否是一组评论。如果它不是数组,那就是你的问题,你可以暂时将一些模拟数据放在那里,直到你可以让它工作。

关于javascript - react .js : Uncaught TypeError: undefined is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29070641/

相关文章:

javascript - react.js 中的键绑定(bind)

javascript - 如何创建动态字典和添加删除键值对?

javascript - 在 Selenium IDE 中比较日期

javascript - jQuery 1.9 中 DOM 更改后事件无法触发

javascript - JavaScript 中的结构和面向对象

php - 通过Jquery AJAX发送两条数据?

ruby-on-rails - 如何以及为什么要在 Rails 应用程序中实现 Oauth?

ruby-on-rails - 如何获取 Rails 3.2 中 Assets 的完整 URL?

ruby-on-rails - Rails 基本问题 - 如何在数据库中创建新条目?

reactjs - 草案.JS : the proper way to detect content change