ReactJSとYouTube APIで遊んで、プレイリストから自動的にビデオを取り出すようになりました。下に表示されたコンポーネントを取得しようとしているが、私のコンポーネント内の状態の "アイテム"リストにアクセスできないようです。私は$GET
の結果を取り戻すとthis.state
に挿入することができましたが、私はrender()
Video
内のコンポーネントの内部で再びそれを参照しようとすると、私は行うことができなかったのですReactJSコンポーネントのレンダリングに必要なもの - YouTube API
import React, { Component } from 'react';
import './App.css';
import $ from 'jquery';
class App extends Component {
constructor(props) {
super(props);
this.state = {}
}
componentDidMount =() => {
var thisContext=this;
$.get("https://content.googleapis.com/youtube/v3/playlistItems?maxResults=4&part=snippet&playlistId={SOME_PLAYLIST_ID}&key={MY_API_KEY}", function (data) {
thisContext.setState(data);
})
}
render() {
return (
<div>
<Video />
</div>
);
}
}
class Video extends App {
render() {
return(
<div>
<iframe width="560" height="315" src={'https://www.youtube.com/embed/' + this.state.items[0].snippet.resourceId.videoId} frameborder="0" allowfullscreen></iframe>
</div>
)
}
}
export default App;
:以下のコードを参照してください。そう。私はいくつかの非同期/参照の問題が続いていると推測しています。どんな入力をいただければ幸いですか?
P.S - ボーナスに関する質問items[]
をループしてすべてのビデオIDを取得し、それぞれを<Video />
コンポーネントとして表示するにはどうすればいいですか、それともアイテムをループする方法ではありませんか?まで、あなたの応答を取得する前に
componentDidMount =() => {
$.get("https://content.googleapis.com/youtube/v3/playlistItems?maxResults=4&part=snippet&playlistId={SOME_PLAYLIST_ID}&key={MY_API_KEY}", (data) => {
this.setState({ items: data });
});
}
render
機能も呼ばれ、そして:
ありがとう! 'this.state.items'にヌルチェックを追加しました! 'Video'コンポーネントがどのようにレンダリングされるのかまだよく分かりません。データが利用できないときに 'null'を返した場合、どのように/コンポーネントが再びロードされますか? –
すべての 'setState'呼び出しまたはコンポーネントへの小道具変更の後、' render'関数が再び呼び出されます。それは再び読み込まれていない、それはただ再レンダリングされている(コンストラクタ/ componentWillMount/componentDidMountが呼び出されることはなく、単に 'render') –