私は反応するのが初めてで、特定のプロジェクトにこだわっています。問題は、親コンポーネントから受け取ったapi_url
にthis.props
があることです。この子コンポーネントでは、api_url
を使用して、JSONを使用してデータを取得します。
親コンポーネントには次のものがあります。
Repositories api_url={this.state.objs.repos_url}
子コンポーネントでは、次のようなものが必要です:
componentDidMount() {
$.getJSON(this.props.api_url, function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
});
}
必要なのは、api_url
のurlセクションにある対応する$.getJSON
です。
componentDidMount
のthis.props
にアクセスする方法はありますか、または同じ結果を達成する他の方法はありますか?
これに関する別のことは、親コンポーネントのComponentDidMount
で$.getJSON
呼び出しも使用していることです。
事前に感謝します。
クラスにコンストラクタを実装します。
constructor(props){
super(props);
this.state = {
//states
};
}
componentDidMount(){
//Get this.props
console.log(this.props.nameOfProp);
};
おそらく、この反応バージョンでは、より簡単に入手できます。
子コンポーネントの小道具にアクセスするには、子コンポーネントにコンストラクターを作成し、属性としてpropsをsuper()関数に渡す必要があります。
constructor(props) {
super(props);
this.state = {}
}
componentDidMount(){
$.getJSON(this.props.api_url , function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
});
}
これを行うと、子コンポーネント全体の小道具にアクセスできます
おそらく、ajax呼び出し内のthis
に問題があります。私の推測では、あなたのajax呼び出しでthis
のインスタンスがajaxオブジェクトではなくリポジトリを参照するように、リポジトリでthis
をバインドする必要があるでしょう。
今このページにつまずく人のために、上に欠けているのは_$.getJSON
_の後の.bind(this)
です。そうしないと、_$.getJSON
_内でthis
にアクセスできません。
_componentDidMount() {
$.getJSON(this.props.api_url, function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
}).bind(this);
}
_