Nano Hash - криптовалюты, майнинг, программирование

Получение данных ответа Axios React

Я пытался сделать вызов API и получить данные обратно в виде массива для перебора массива и заполнения реагирующих компонентов. Проблема в том, что я получаю только обещания, и поэтому реакция не позволит мне использовать функцию карты. Я новичок, чтобы реагировать, и у меня проблемы с пониманием проблемы.

Я делаю вызов axios, как показано ниже:

const makeRequest = async (url) => {
  return await axios.get(url).then(response => response.data);
}

А затем попытка сохранить ответ массива внутри переменной для повторения.

let data = makeRequest("someUrl");

Если у меня есть вызов console.log() внутри запроса, я могу получить массив, но как только я пытаюсь сохранить его в переменной, я получаю только обещание. Любая помощь будет большой спасибо!

04.05.2021

Ответы:


1

Вам нужно использовать переменную состояния для обработки асинхронных данных.

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

import React, { useEffect, useState } from "react";
import axios from "axios";

function DisplayData() {
  // initialize data state variable as an empty array
  const [data, setData] = useState([]);

  // make the fetch the first time your component mounts
  useEffect(() => {
    axios.get(url).then(response => setData(response.data));
  }, []);

  return (
    <div>
      {data.map((row) => (
        <p key={row.id}>{row.content}</p>
      ))}
    </div>
  );
}
04.05.2021
  • Огромное спасибо! Это решило мою проблему без постоянных повторных рендеров, очень ценю это. 04.05.2021
  • @BrandonGullion В последней версии реакции возврат обещания из useEffect вызовет ошибку, и я обновил свой ответ, чтобы отразить это 21.05.2021

  • 2

    Пожалуйста, возьмите ссылку из приведенного ниже примера, это может быть полезно:

    // api.js
    import axios from 'axios';
    
    export default axios.create({
      baseURL: `xyz`
    });
    
    // PersonList
    import React from 'react';
    import axios from 'axios';
    
    export default class PersonList extends React.Component {
      state = {
        id: '',
      }
    
      handleChange = event => {
        this.setState({ id: event.target.value });
      }
    
      handleSubmit = async event => {
        event.preventDefault();
    
        const response = await API.get(`xyz`);
        console.log(response);
        console.log(response.data);
      }
    
      render() {
        return (
          <div>
            <form onSubmit={this.handleSubmit}>
              <label>
                Person ID:
                <input type="text" name="id" onChange={this.handleChange} />
              </label>
              <button type="submit">Delete</button>
            </form>
          </div>
        )
      }
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.2.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.2.0/react-dom.min.js"></script>
    <div>

    04.05.2021
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..