Зачем при каждом выводе цены получать информацию по валютам? Запрашивайте её один раз, при создании экземпляра компонента, сохраняйте в стейт, при выводе цены доставайте нужный rate:
class App extends React.Component {
state = {
rates: {
RUB: 1,
},
currency: 'RUB',
currencies: [
{ name: 'RUB', label: 'RUB' },
{ name: 'USD', label: 'USD' },
{ name: 'EUR', label: 'EUR' },
],
}
onCurrencyChange = ({ target: { dataset: { currency } } }) => {
this.setState({ currency });
}
componentDidMount() {
fetch('https://www.floatrates.com/daily/rub.json')
.then(res => res.json())
.then(data => {
this.setState(({ rates }) => ({
rates: {
...rates,
...Object.values(data).reduce((acc, n) => (acc[n.code] = n.rate, acc), {}),
},
}));
});
}
render() {
const { currency, currencies, rates } = this.state;
return (
<div>
{currencies.map(({ name, label }) => (
<button
className={`btn__item ${currency === name ? 'active' : ''}`}
data-currency={name}
onClick={this.onCurrencyChange}
>
{label}
</button>
))}
{this.props.products.map(({ name, price }) => (
<div>
<span>{name}</span>
<span>{(price * rates[currency]).toFixed(2)} {currency}</span>
</div>
))}
</div>
);
}
}
const products = [
{ name: 'яблоки', price: '80' },
{ name: 'греча', price: '50' },
{ name: 'конфеты', price: '380' },
];
ReactDOM.render(<App products={products} />, document.getElementById('root'));