簡體   English   中英

無法從React狀態獲取數據

[英]Can't get data from React state

我有以下ReactJS代碼:

var CommentList = React.createClass({

      render: function(){

        var commentNodes = this.props.data.map(function(comment){

          return (
            <Comment author={comment.author} key={comment.id}>
              {comment.text}
            </Comment>

          );

        });

        return (
          <div className="commentList">
            {commentNodes}
          </div>
        );

      }

    });

並在CommentBox中...

var CommentBox = React.createClass({

      loadCommentFromServer: function() {

        $.ajax({
          url: this.props.url,
          dataType: 'json',
          cache: false,
          success: function(data) {

            this.setState({
              data: data
            });

          }.bind(this),

          error: function(xhr, status, err) {

              console.error(this.props.url, status, err.toString());

        }.bind(this)

        });

      },

    },
    getInitialState: function() {

      return {
        data: []
      };

    },

    componentDidMount: function() {

      this.loadCommentFromServer();

      setInterval(this.loadCommentFromServer, this.props.pollInterval);

    },

    render: function() {

      return ( 
        <div className = "commentBox" >
            <h1> Comments </h1> 
            <CommentList data ={ this.state.data } />
            <CommentForm />
        </div>
      );

     }

});

getInitialState() ,我已經為數據分配了值,並且在CommentList還添加了從狀態獲取值的屬性數據。

當我嘗試運行時,出現以下錯誤:

無法讀取CommentList中未定義的屬性“ map”。

看起來您只是沒有從jQuery.ajax中獲取想要的數據。

      success: function(data) {
        // before setting state, log here and find out what data is
        // it could need to be turned into JSON? data = data.toJSON();
        // or simply this to be safe
        data = data || [];

        this.setState({
          data: data
        });

      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM