LoginSignup
0
2

More than 5 years have passed since last update.

❄️React.js how to call an API

Last updated at Posted at 2017-12-04

スクリーンショット 2017-12-04 13.14.23.png


スクリーンショット 2017-12-04 13.15.22.png


Create the new application called wolf-of-react
The axios is needed to call an API.

$ yarn create react-app wolf-of-react

$ yarn add axios

You can delete unnecessary parts like this.

public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="theme-color" content="#000000">
  <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
  <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
  <title>React App</title>
</head>
<body>
  <div id="root"></div>
</body>
</html>
src/App.js
import React, { Component } from 'react';
import './App.css';
import StockInfo from './components/StockInfo';
import { loadQuoteForStock, loadCompanyLogoForStock } from './api/iex';

class App extends Component {
  state = {
    symbol: 'F',
    quote: null
  }

  componentDidMount(){
    this.loadQuote()
  }

  loadQuote() {
    loadQuoteForStock(this.state.symbol)
    .then((quote)=> {
      console.log(quote)
      this.setState({quote: quote})
    })
    .catch((err)=> {console.log(err)})
  }

  handleSymbolChange =(event)=>{
    const target = event.target;
    const symbol = target.value;
    this.setState({symbol: symbol });
    console.log(event);
  }

  handleButtonClick = (event) => {
    console.log(event.target);
    this.loadQuote();
  }

  render() {
    return (
      <div className="App">
      <h1>Wolf of React</h1>
      <input
      value={this.state.symbol}
      placeholder="Enter symbol"
      onChange={this.handleSymbolChange}
      />
      <button onClick={ this.handleButtonClick }>Get Quote</button>
      <StockInfo {...this.state.quote}/>
      </div>
    )
  }
}

export default App;

Create the components folder in the src folder.
And create the StockInfo.js file in the /src/components folder.

src/components/StockInfo.js
import React from 'react';

function StockInfo({
  symbol,
  companyName,
  primaryExchange,
  latestPrice,
  latestSource,
  week52High,
  week52Low
}){

  return(
    <div>
    <h2>{ symbol }: { companyName }</h2>
    <h3>{ latestPrice } ({ latestSource} )</h3>
    <dl>
    <dt>Week 52 High</dt>
    <dd>{ week52High }</dd>

    <dt>Week 52 Low</dt>
    <dd>{ week52Low }</dd>

    <dt>Exchange</dt>
    <dd>{ primaryExchange }</dd>
    </dl>
    </div>
  )
}

export default StockInfo;

Create the folder called api and the iex.js file in it.

src/api/iex.js
import axios from 'axios';

const api = axios.create({
  baseURL: 'https://api.iextrading.com/1.0'
});

export function loadQuoteForStock(symbol){
  return api.get(`/stock/${symbol}/quote`)
  .then((res)=>{
    return  res.data
  });
}
$ yarn run start
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2