2017-10-04 3 views
1

Je fais deux demandes distinctes à différentes API pour recevoir le [Bitcoin/USD], puis [GBP/USD]. J'utilise axios pour configurer un promise, et sur les deux appels résolvant avec succès, je mets les deux valeurs à l'état set.State{}. Je suis en train de calculer le taux de change entre GBP/Bitcoin, mais pour la vie de moi ne peut pas m'en tenir à la meilleure façon de le faire. Cela fait aussi un petit moment que j'ai utilisé React, donc tous les conseils pour améliorer ce que j'ai sont géniaux.Deux appels API différents - calculer le taux de change

app.js

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

class App extends Component { 

    constructor(props) { 
    super(props); 

    this.state = { 
     conv: [], 
     GBP: [], 
     XBT: [], 
    }; 
    } 

    componentDidMount() { 
    axios.all([this.getXbt(), this.getGbp()]) 
     .then(axios.spread((xbtValue, gbpValue) => { 
     const XBT = xbtValue.data.bpi.USD.rate_float; 
     const GBP = gbpValue.data.rates.GBP; 
     const conv = this.calcConversion(GBP, XBT); 
     this.setState({conv, GBP, XBT}); 
     })); 
    } 

    calcConversion(x, y) { 
    // Calculate conversion value here 
    return x/y; 
    } 

    getXbt() { 
    return axios.get('https://api.coindesk.com/v1/bpi/currentprice/XBT.json'); 
    } 

    getGbp() { 
    return axios.get('https://openexchangerates.org/api/latest.json?app_id=#API_KEY#'); 
    } 

    render() { 
    return (
     <div className="App"> 
      <div id="crypto-conversion"> 
      <span className="left">{this.state.conv}</span> 
      </div> 
      <div id="crypto-container"> 
      <span className="left">{this.state.GBP}</span> 
      <span className="right">{this.state.XBT}</span> 
      </div> 
     </div> 
    ); 
    } 
} 

export default App; 

Répondre

2

En supposant que les API retournent les données GBP/1USD et USD/1XBT, le taux de conversion est simplement le produit des deux valeurs et entraînera GBP/1XBT.

Cela fait aussi un petit moment que j'ai utilisé React, donc tout conseil pour améliorer ce que j'ai est formidable.

Votre code semble très bien jusqu'à présent. J'aime la façon dont vous avez traité les appels d'API, et l'appel setState() suit la convention jusqu'à ne l'appeler qu'une seule fois.

Edit:

Aussi, je viens de réaliser si vous êtes prêt à débourser 95 $/mois, l'API Taux de change ouvert fournit un point de terminaison /convert qui prend en charge BTC.