質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

2回答

412閲覧

onreadystatechange内でのsetStateの仕方について

hfidk

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/12/11 16:30

openWeatherAPIで天気を取得しsetStateでweatherというステートに状態を格納したいと思っています

reactJSでopenweatherAPIを叩いて天気情報をstateに入れようとしたのですが、(オブジェクト名).onreadystatechangeからのsetStateで既存のstateに天気を入れようとしたところ下記のエラーメッセージが出てつまりました

this.setState is not a function

該当のソースコード

react.js

1xhr.onreadystatechange = function() { 2 if(xhr.readyState === 4) { //「もしデータを取得して通信が完了しているなら」番号で状態が変わる(5種類) 3 data = JSON.parse(xhr.responseText); 4 this.setState({weather: data.weather[0].main}) ; 5 } 6 }

試したこと

thisを記述する場所によって指定先がreactのコンポーネントに向いていない...ってことがぐぐって出てきたのですが、そこから理解できません、解決方法などあればよろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

もしよろしければxhr.onreadystatechange = function() {...}の部分だけではなく、Reactの周辺コードも共有いただけますか?

以下、XMLHttpRequestがevent handlerの中で実行されてると想定の上での回答です。

その場合、以下コードの場合はthis.setState(…)の利用が可能かと思います。

Javascript

1 xhr.open(method, url, true); 2 xhr.onreadystatechange = () => { 3 if (xhr.readyState === 4 && xhr.status === 200) { 4 this.setState({ asyncRequestStatus: xhr.status }); 5 } 6 }; 7 xhr.send(); 8

https://codepen.io/engineer_jp_us/pen/vbZxNz?editors=1010

投稿2019/02/04 00:42

engineer_jp_us

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この直後に

.bind(this);

をつけることで解決しました。でもどうして解決できたのかがイマイチわからず気持ち悪いです。

投稿2018/12/11 17:10

hfidk

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問