ОШИБКА axios.get при использовании метода axios.create с использованием baseUrl

Я попытался создать приложение из случайного пользовательского API в реакции и использовал библиотеку axios для HTTP-запросов. Я создал отдельный файл для базового API, используя axios.create, и код файла выглядит так:

import axios from 'axios'

export default axios.create({
  baseURL: `http://jsonplaceholder.typicode.com`,
}); 

Затем я использовал это в другом файле, чтобы сделать запрос GET и сохранить данные в state на componentdidMount, чтобы я мог получить доступ к данным в пользовательском интерфейсе.

import React from "react";
import API from "../api";
export default class PersonList extends React.Component {
  state = {
    persons: []
  };
  componentDidMount() {
    API
      .get('/').then((data) => {
      const persons = data.data;
      this.setState({ persons });
      console.info(this.state.persons);
    });
  }
  render() {
    const { persons } = this.state;
    console.info('Stato',persons)
    return (
      <ul>
        {persons.map((person) => (
          <li key = {person.id}>{person.name}</li>
        ))}
      </ul>
    );
  }
}

Но это не работает, потому что состояние не заполнено данными пользователей, поэтому функция .map() выдает ошибку.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
599
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы столкнулись с этой ошибкой из-за используемого вами URL-адреса. В вашем примере вы используете https://jsonplaceholder.typicode.com в качестве конечной точки в componentDidMount, но это не вернет никаких пользовательских данных-заполнителей. Я полагаю, вы хотели использовать https://jsonplaceholder.typicode.com/users вместо этого.

У меня есть рабочий пример здесь: https://codesandbox.io/s/axios-instance-ki9g6. Обратите внимание, что мне нужно было всего лишь заменить / в componentDidMount на /users.

В качестве дополнительного предложения использование чего-то вроде lodash или ramda может помочь устранить ошибки, вызванные map, если список, который вы пытаетесь повторить, не имеет ожидаемой формы. Это, конечно, не решит вашу настоящую проблему, но может сократить количество ошибок, которые всплывают перед вами. Я соответствующим образом обновлю свою песочницу, чтобы показать пример этого.

sammyt 09.12.2020 17:55

Без проблем. Рад, что смог помочь!

sammyt 09.12.2020 18:06

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