特定の暗号化通貨コインのオブジェクトの配列を保持するapiエンドポイントを使用します。反応内の値状態の消去
ユーザーは特定のコインを入力して提出でき、価格を返すことができるフォームを作成しました。そのコインは、API内のオブジェクトの配列内にあるかどうかをチェックします。それが有効であれば、それをコンストラクタのフィルタ結果配列にプッシュします。
私の最初の検索クエリは機能しますが、2番目のクエリ検索を実行して送信ボタンを押すと失敗し、ページをリロードします。
constructor() {
super();
this.state = {value: ''};
this.state = {coin: []};
this.state = {items: []};
this.state = {filteredResults: []};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
let coin = this.state.value;
this.findCoin(coin);
event.preventDefault();
}
findCoin(id) {
this.state.items.forEach(function(currency){
if(currency.id === id) {
this.state.filteredResults.push(currency)
}
}, this);
this.setState({filteredResults: this.state.filteredResults[0]});
}
componentDidMount() {
fetch(`https://api.coinmarketcap.com/v1/ticker/`)
.then((result)=> {
result.json()
.then(json => {
this.setState({items: json})
});
});
}
render() {
return (
<div className="App">
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
<div> Price: $ {this.state.filteredResults.price_usd}
</div>
</div>
);
}
}
おそらくあなたの問題には関係ありませんが、あなたのコンストラクタでの状態の設定は、おそらくに望んでいることは次のようになります。 'this.state = {値:「」、コイン:[]、項目:[] 、filteredResults:[]} ' –