Я попытался создать приложение из случайного пользовательского 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() выдает ошибку.
Вы столкнулись с этой ошибкой из-за используемого вами URL-адреса. В вашем примере вы используете https://jsonplaceholder.typicode.com
в качестве конечной точки в componentDidMount
, но это не вернет никаких пользовательских данных-заполнителей. Я полагаю, вы хотели использовать https://jsonplaceholder.typicode.com/users
вместо этого.
У меня есть рабочий пример здесь: https://codesandbox.io/s/axios-instance-ki9g6. Обратите внимание, что мне нужно было всего лишь заменить /
в componentDidMount
на /users
.
Без проблем. Рад, что смог помочь!
В качестве дополнительного предложения использование чего-то вроде
lodash
илиramda
может помочь устранить ошибки, вызванныеmap
, если список, который вы пытаетесь повторить, не имеет ожидаемой формы. Это, конечно, не решит вашу настоящую проблему, но может сократить количество ошибок, которые всплывают перед вами. Я соответствующим образом обновлю свою песочницу, чтобы показать пример этого.