2017-08-13 3 views
0
componentDidMount() { 
    $.ajax({ 
     type: "GET", 
     url: "/tweets", 
     dataType: "json", 
     success: function (data){ 
      //$('#tweetsList').append(data); 
      this.setState({tweetsList: data}); 
     }, 
     error: function (error) { 
      console.log(error); 
     } 
    }); 
} 

上記のコードブロックは私にthis.setState関数が見つかりませんでしたエラーを返します。私は、Tweetsコントローラからjsonをmain.jsxファイルにレンダリングしようとしています。this.setState関数ではないrails

+0

この変更のコンテキストは、ajax呼び出しで変更されます。元のコンテキストを参照する必要があります。答えを書く。 –

答えて

1

のコンテキストは、ajax呼び出しで変更されました。 thisはあなたのコンポーネントを参照しなくなりました。元のコンテキストを参照する必要があります。

componentDidMount() { 
    const self = this; 
    $.ajax({ 
     type: "GET", 
     url: "/tweets", 
     dataType: "json", 
     success: function (data){ 
      //$('#tweetsList').append(data); 
      self.setState({tweetsList: data}); 
     }, 
     error: function (error) { 
      console.log(error); 
     } 
    }); 
} 
+0

ありがとうございます。ページはエラーなしでレンダリングされます。ただし、コントローラからはデータはレンダリングされません。 –

+0

はあなたが '$( '#tweetList')。append(data)'をコメントアウトしているからです。 –

+0

それは無関係です。次のようにツイートコントローラでの私のインデックスメソッドが見えます。defインデックス \t \t @tweets = Tweet.all \t \tレンダリングJSON:あなたはTweet.all' 'への2つの呼び出しを作っている全てのTweet.all \tエンド –

0

問題は、その関数を指し、したがって、任意のsetState方法を持っていないあなたの成功コールバック関数でthisあります。あなたはこのようなjQueryのAJAX呼び出しにコンテキストを渡すことができます。

$.ajax({ type: "GET", url: "/tweets", dataType: "json", context: this, success: function (data){ //$('#tweetsList').append(data); this.setState({tweetsList: data}); }, error: function (error) { console.log(error); } });

は、より多くの情報のためのコンテキストプロパティについてjQuery ajax docsを参照してください。

+0

ありがとうございます。ページはエラーなしでレンダリングされます。ただし、コントローラからはデータはレンダリングされません。 –

関連する問題