2017-11-25 14 views
0

Reactを使用して外部APIから学校のデータを表示しようとしています。私はちょうど開始する学校の名前を表示しようとしています。学校名はコンソールに表示されますが、ブラウザには表示されません.APIコールは正しいですが、Postmanで動作します。ここに私のコードは次のとおりです。schoolNameあなたの状態変数ではなくschoolですので、あなたのrenderメソッドでReact App:フェッチを使用してAPIからデータを表示する方法

import React, { Component } from 'react'; 
import './App.css'; 

class App extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     schoolName: '', 
     // schoolData: {} 
    } 
    } 

    fetchSchool(event) { 
    event.preventDefault(); 

    const apiKey = 'XdOHSc8fKhMKidPu2HWqCZmMy9OxtCJamGC580Bi'; 
    const fields = `_fields=school.name,2015.aid.median_debt.completers.overall,2015.cost.tuition.in_state&school.name=${this.state.schoolName}`; 
    const requestUrl = `https://api.data.gov/ed/collegescorecard/v1/schools?&api_key=${apiKey}&${fields}`; 

    const school = fetch(requestUrl).then((res) => res.json()).then((data) => console.log(data.results[0]['school.name'])); 

    this.setState({ 
     schoolName: school 
     // schoolData: school 
    }) 
    console.log(this.state.schoolName); 
    } 

    setSchool(event) { 
    event.preventDefault(); 
    this.setState({ 
     schoolName: event.target.value 
    }); 
    } 

    render() { 
    // const schoolname = this.state.schoolName[0]; 
    // const {schooName} = this.state; 
    return (
     <div> 
     <form action="/school" method="GET" id="myform"> 
      <input type="text" className="form-control" id="enter_text" onChange={this.setSchool.bind(this)} /> 
      <button onClick={this.fetchSchool.bind(this)} type="submit" className="btn btn-primary" id="text-enter-button button submit">Submit</button> 
     </form> 
     <div> 
     <p>School: {this.state.school} </p> 
     </div> 
     </div> 
    ); 
    } 
} 

export default App; 
+0

の内部からthis.setStateを呼び出します。 – Kunukn

答えて

0

は、この行を変更します。

<p>School: {this.state.schoolName} </p> 
1

fetch

<p>School: {this.state.school} </p> 

は非同期です。したがって、データがフェッチされる前にsetStateが呼び出されています。この問題を解決するには

、私はそれが機密情報である場合APIKEYの値を削除することをお勧めしますあなたのthen機能

const school = fetch(requestUrl) 
    .then((res) => res.json()) 
    .then((data) => { 
    console.log(data.results[0]['school.name']) 
    this.setState({ 
     schoolName: data.results[0]['school.name'], 
     schoolData: data.results 
    }) 
    }); 
+0

ありがとう!これはほとんど...学校名はブラウザに表示されますが、「送信」をクリックするのではなく、入力すると表示されます。 – user8767190

+0

あなたの 'input'要素から' onChange = {this.setSchool.bind(this)} 'を削除しました –

+0

これは私に新しいエラーを与えました:未定義(フェッチ要求で)の 'school.name'のプロパティを読み取ることができません – user8767190

関連する問題