#javascript #reactjs #api #rest #mapping
#javascript #reactjs #API #отдых #отображение
Вопрос:
Я новичок в React.js разработка и нужна помощь в решении этой проблемы. Я создал сервис с использованием FastAPI, который выполняет ряд объявлений SQL SELECT для базы данных Oracle, принимает результаты и предоставляет их в виде REST API с использованием формата данных JSON.
В веб-браузере Chrome я вижу эту информацию, когда выполняю GET
запрос к API: [API GET results][1]
Следовательно, API возвращает результаты правильно. Чтобы показать их все в моем приложении React, я создал этот компонент:
import React, {Component} from 'react';
export default class App extends React.Component {
state = {
loading: true,
pedidos: []
}
async componentDidMount() {
const url = "http://localhost:8000/pedidos-bloqueados/";
fetch(url)
.then(response => {
return response.json();
})
.then(d => {
this.setState({ pedidos: [d], loading: false });
})
.catch(error => console.log(error))
}
render() {
return (
<div>
{ this.state.loading? <div>Carregando...</div> : <div><li> Cliente: * {(this.state.pedidos.map((pedido, index)=>(this.state.pedidos[index]))).map((p, i)=> p['cliente'])}</li></div> } *
</div>
);
}
}
Оказывается, что при выполнении функции map() внутри метода render() отображается только следующая информация:
Cliente:
Без каких-либо дополнительных данных. И компоненту не разрешено выполнять цикл for() внутри метода render(), что, возможно, могло бы отображать объекты, закодированные в списке JSON.
Я думаю, что проблема в фрагменте: { this.state.loading? <div>Loading...</div> : <div><li> Cliente: {(this.state.pedidos.map((pedido, index)=>(this.state.pedidos[index]))).map((p, i)=> p['cliente'])}</li></div> }
Как я должен изменить свой код, чтобы отображать свойства каждого объекта в списке при рендеринге компонента? (Примечание: cliente — это *** всего лишь один из атрибутов объекта JSON — есть и другие, такие как vendedor, pedido и так далее… Но, если мне удастся перечислить это поле, я смогу повторить поведение для других).
Я ОЧЕНЬ благодарен вам за любую помощь в этом вопросе! [1]: https://i.stack.imgur.com/XHuN3.png
Комментарии:
1. Не могли бы вы показать нам, что console.log(this.state.pedidos) возвращает в целом? Или у вас есть фрагмент для просмотра?
2. @ale917k, спасибо за быстрый ответ. Консоль отображает те же данные из прикрепленного изображения: [ссылка] ( i.stack.imgur.com/XHuN3.png ) .
3. Я думаю, проблема в том, как вы отображаете эти данные — попробуйте следующее:
{ this.state.pedidos.map(pedido => pedido.cliente) }
— Таким образом, вы практически перебираете каждый объект в массиве, и из каждого объекта мы возвращаем свойство «cliente».. Дайте мне знать, если это сработает, поэтому я напишу на него правильный ответ4. Я сделал, как указано, но, к сожалению, теперь я получаю сообщение об ошибке «Свойство ‘cliente’ не существует для типа ‘never'». Пожалуйста, дайте мне знать ваши соображения по поводу этой ошибки.