Как разделить объекты массива axios get

Здравствуйте, я сделал простой запрос на получение AXIOS и получил массив объектов. Но пример, который я использовал для достижения этой цели, возвращает весь массив одновременно, и мне нужно разделить объекты, чтобы я мог использовать каждый из них отдельно.

class apitest extends Component {
  constructor(props) {
    super(props);

    this.state = {
      cryptos: []
    };
  }

  componentDidMount() {
    axios
      .get(
        "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,XRP,BCH,EOS,TRX&tsyms=EUR,CHANGE&api_key=xxx"
      )
      .then(res => {
        const cryptos = res.data;
        console.info(cryptos);
        this.setState({ cryptos: cryptos});
      });
  }

  render() {
    return (
      <div className = "test">
        {Object.keys(this.state.cryptos).map(key => (
          <div id = "crypto-container">
            <span className = "left">{key}</span>
            <span className = "right">
              <NumberFormat
                value = {this.state.cryptos[key].EUR}
                displayType = {"text"}
                decimalPrecision = {2}
                thousandSeparator = {true}
                prefix = {"€"}
              />
            </span>
          </div>
        ))}
      </div>
    );
  }
}

export default apitest;

Не могли бы вы опубликовать пример ответа, который вы получаете?

Marcus 29.04.2019 10:33

Объект { BTC: {…}, ETH: {…}, XRP: {…}, BCH: {…}, EOS: {…}, TRX: {…} }

Andrew 29.04.2019 10:36

Это не массив объектов, это объект со свойствами, которые, в свою очередь, являются объектами. Это правильно?

Marcus 29.04.2019 10:41

Да вы правы!

Andrew 29.04.2019 10:49

Именно это объект со свойствами, которые в свою очередь являются объектами. Так что либо отредактируйте свой вопрос, либо спросите соответственно

Deepankar Singh 29.04.2019 10:50

Смотрите ответ ниже (и я согласен, что это, вероятно, идея изменить название вопроса;)).

Marcus 29.04.2019 10:52

правильно ответил

Deepankar Singh 29.04.2019 10:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
8 963
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ от AXIOS представляет собой массив JSON? Если да, пытались ли вы заставить ответ json в AXIOS?

axios
  .get(
    "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,XRP,BCH,EOS,TRX&tsyms=EUR,CHANGE&api_key=xxx",
    {
      responseType: 'json',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      }
    }
  )
  .then(...)

Помимо этого, то, как вы выполняете итерацию при рендеринге, было бы лучше:

  • Проверьте, существует ли this.state.cryptos, прежде чем повторять его.
  • Поместите key на первый отступ в итераторе; Это нужно ReactJ.
  • Создайте итератор объекта вместо ключевого итератора.

Рефакторинг рендеринга:

render() {
  if (this.state.cryptos.length === 0) return null;

  return (
    <div className = "test">
      {this.state.cryptos.map((crypto, key) => (
        <div id = "crypto-container" key = {key}>
          <span className = "left">{key}</span>
          <span className = "right">
            <NumberFormat
              value = {crypto.EUR}
              displayType = {"text"}
              decimalPrecision = {2}
              thousandSeparator = {true}
              prefix = {"€"}
            />
          </span>
        </div>
      ))}
    </div>
  );
}
Ответ принят как подходящий

Вы получаете объект, свойства которого сами являются объектами. Для перебора этих свойств вы можете использовать Object.keys(), например:


Object.keys(response).forEach((property) => {
    // Access each object here by using response[property]...
})

Вам также может понадобиться сначала преобразовать ответ из JSON, но я уверен, что вы знаете, как это сделать.

Это работает, если вам не нужно позже удалять (фактически, splice()) элементы массива. Вы можете удалять элементы объекта с помощью delete response[property], но в объекте «индексы» (то есть ключи) не меняются.

terminus.technicus 06.08.2020 02:37

Другие вопросы по теме