@nickname13384

Как заставить работать конвертер валют?

Как заставить работать конвертер валют? Не получается вернуть значение из функции.
Может можно сделать еще проще и написать меньше кода, чем писать if для каждой валюты.
Код здесь: https://codepen.io/pagetesttask/pen/ZgWVLZ
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Зачем при каждом выводе цены получать информацию по валютам? Запрашивайте её один раз, при создании экземпляра компонента, сохраняйте в стейт, при выводе цены доставайте нужный 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>
            &nbsp;
            <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'));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 17:23
100000 руб./за проект
01 мая 2024, в 16:45
120000 руб./за проект