Я создаю простое приложение для реагирования на расходы. В этом приложении пользователи вводят описание, сумму и дату для определенной статьи расходов. Эта статья расходов или состояние «Бюджет» сохраняется в бэкенде. Теперь всякий раз, когда пользователь загружает страницу, делается запрос GET для получения «Бюджета» и выводится в таблицу.
Проблема в том, что API возвращает информацию, но функция карты ничего не выводит в таблицу.
Вот как данные выглядят в mongoDB:
_id:[some id]
desc:"Lodging"
amount:30
date:"2020-05-02T03:28:49.000Z"
_id:[some id]
desc:"Shopping"
amount:120
date:"2020-05-02T03:55:41.000Z"
Вот что возвращает API, когда я записываю его в консоль:
{
"success": true,
"budget": [
{
"_id": "someId",
"desc": "Lodging",
"amount": 30,
"date": "2020-05-02T03:28:49.000Z",
"createdAt": "2020-05-18T03:29:01.879Z",
"updatedAt": "2020-05-18T03:29:01.879Z",
"__v": 0
},
{
"_id": "someId",
"desc": "Shopping",
"amount": 120,
"date": "2020-05-02T03:55:41.000Z",
"createdAt": "2020-05-22T03:56:08.670Z",
"updatedAt": "2020-05-22T03:56:08.670Z",
"__v": 0
}
]
}
Вот полный код:
const [Budget, setBudget] = useState([]);
const [loadingBudget, setloadingBudget] = useState(true);
useEffect(() => {
axios
.get("[API Route]")
.then((response) => {
if (response.data.success) {
console.log(response.data);
setBudget([...Budget, response.data.budget]);
} else {
alert("Failed to get Budget");
}
});
setloadingBudget(false);
}, []);
const values = Budget.map((i) => {
return (
<tr>
<td>{i.desc}</td>
<td>{i.amount}</td>
</tr>
);
});
return (
<React.Fragment>
<table
style={{ width: "40%", marginTop: "-300px", marginLeft: "720px" }}
className="highlight">
<thead className="thead-light">
<tr>
<th>Description</th>
<th>Amount</th>
</tr>
</thead>
<tbody>{!loadingBudget && values}</tbody>
</table>
</React.Fragment>
Я полагал, что компонент может отобразиться до того, как API вернет результат. В результате я добавил состояние loadingBudget, чтобы исправить это. Однако функция карты (то есть значения) ничего не возвращает. Любая обратная связь будет принята с благодарностью!
console.log(JSON.stringify(response.data, null, 2))
, чтобы мы могли видеть реальную структуру, отправленную обратно... - person Heretic Monkey   schedule 22.05.2020