-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.js
63 lines (47 loc) · 1.75 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React, { useState, useEffect } from 'react';
import imagen from './assets/images/cryptomonedas.png';
import Formulario from './components/Formulario';
import Loading from './components/Loading';
import axios from 'axios';
import Conversion from './components/Conversion';
function App() {
const [ moneda, guardarMoneda ] = useState('');
const [ criptomoneda, guardarCriptomoneda ] = useState('');
const [ cargando, guardarCargando ] = useState(false);
const [ resultado, guardarResultado ] = useState({});
useEffect(
() => {
const cotizarCriptoMoneda = async () => {
// SI NO HAY MONEDA, NO EJECUTAR
if (moneda === '') return;
const url = `https://min-api.cryptocompare.com/data/pricemultifull?fsyms=${criptomoneda}&tsyms=${moneda}`;
const resultado = await axios.get(url);
// MOSTRAR LOADING
guardarCargando(true);
// OCULTAR LOADING Y AGREGAR EL RESULTADO
setTimeout( () => {
guardarCargando(false);
guardarResultado(resultado.data.DISPLAY[criptomoneda][moneda]);
}, 3000);
}
cotizarCriptoMoneda();
}, [moneda, criptomoneda]
)
// MOSTRAR LOADING O RESULTADO
const cargandoComponent = (cargando) ? <Loading /> : <Conversion resultado={resultado} />;
return (
<div className="container">
<div className="row">
<div className="one-half column">
<img src={imagen} alt="imagen criptomonedas" className="logotipo" />
</div>
<div className="one-half column" >
<h1>Cotizador de Criptomonedas</h1>
<Formulario guardarMoneda={guardarMoneda} guardarCriptomoneda={guardarCriptomoneda} />
{cargandoComponent}
</div>
</div>
</div>
);
}
export default App;