Hi,
I was trying the whole week to fix this App in the lesson of usestate but it’s not working, I give up.
I did the same as zsolt did, I’m seeing an error state not defined even if I imported usestate.
import React, {useState} from 'react';
import CoinList from './components/CoinList/CoinList';
import AccountBalance from './components/AccountBalance/AccountBalance';
import ExchangeHeader from './components/ExchangeHeader/ExchangeHeader';
import styled from 'styled-components';
import axios from 'axios';
const Div = styled.div`
text-align: center;
background-color: rgb(44, 44, 182);
color: #cccccc;
`;
const COIN_COUNT = 10;
const formatPrice = price => parseFloat(Number(price).toFixed(4));
function App(props) {
const [balance, setBalance] = useState(10000);
const [showBalance, setShowBalance] = useState(true);
const [coinData, setCoinData] =useState([]);
const componentDidMount = async () => {
const response = await axios.get('https://api.coinpaprika.com/v1/coins');
const coinIds = response.data.slice(0, COIN_COUNT).map(coin => coin.id);
const tickerUrl = 'https://api.coinpaprika.com/v1/tickers/';
const promises = coinIds.map(id => axios.get(tickerUrl + id));
const coinData = await Promise.all(promises);
const coinPriceData = coinData.map(function(response) {
const coin = response.data;
return {
key: coin.id,
name: coin.name,
ticker: coin.symbol,
balance: 0,
price: parseFloat(Number(coin.quotes.USD.price).toFixed(4)),
};
});
setCoinData(coinPriceData);
}
const handleBalanceVisibilityChange = () => {
setShowBalance(oldValue => !oldValue);
}
/*useEffect(function() {
if (coinData.length === 0 ) {
componentDidMount();
}
});*/
const handleRefresh = async (valueChangeId) => {
const tickerUrl = `https://api.coinpaprika.com/v1/tickers/${valueChangeId}`;
const response = await axios.get(tickerUrl);
const newPrice = formatPrice(response.data.quotes.USD.price);
const newCoinData = coinData.map( function( values ) {
let newValues = { ...values };
if ( valueChangeId === values.key) {
newValues.price = newPrice;
}
return newValues;
});
setCoinData(newCoinData);
}
return (
<Div className="App">
<ExchangeHeader />
<AccountBalance
amount={state.balance}
showBalance={state.showBalance}
handleBalanceVisibilityChange={handleBalanceVisibilityChange} />
<CoinList
coinData={state.coinData}
showBalance={state.showBalance}
handleRefresh={handleRefresh} />
</Div>
);
}
export default App;