#javascript #reactjs #api #fetch
Вопрос:
Я получил некоторые данные из API, я пытаюсь отобразить данные, но я делаю что-то не так. Кто-нибудь может помочь? Я прикрепил фотографии полученных данных на консоли и свой код[![api данных
import React, {useState, useEffect} from 'react'
import './Track.css';
export default function Track() {
const [carbon] = useState([])
useEffect( () => {
const headers = {
'Accept':'application/json'
};
fetch('https://api.carbonintensity.org.uk/intensity',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
})
return (
<div>
<p>Track</p>
<div>
<p>{carbon.forecast}</p>
</div>
</div>
)
}
Комментарии:
1. Я не совсем уверен, чего вы ожидаете здесь, но вам нужно узнать, как работают асинхронный код и выборка , а также использование состояния с крючками .
Ответ №1:
Изменить на
import React, { useState, useEffect } from 'react'
import './Track.css';
export default function Track() {
const [carbon, setCarbon] = useState([])
useEffect(() => {
const headers = {
'Accept': 'application/json'
};
fetch('https://api.carbonintensity.org.uk/intensity',
{
method: 'GET',
headers: headers
})
.then(function (res) {
setCarbon(res.data)
}).then(function (body) {
console.log(body);
});
})
return (
<div>
<div>
{carbon.map((obj, i) => (
<li key={i}>
<ul>{obj.from}</ul>
</li>
))}
</div>
</div>
)
}
Я рекомендую вам учиться https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/map
Ответ №2:
вы забыли какую-то мелочь:
сначала вы забыли набор в крючке useStae, он вам понадобится, чтобы передать ответ из выборки.
Вы забыли установить состояние в fecth. Вам нужно будет добавить условие для визуализации только тогда, когда задано состояние (углерод). вам нужно добавить пустую зависимость для использования эффекта
import React, { useState, useEffect } from "react";
export default function Track() {
const [carbon, setCarbon] = useState([]);
useEffect(() => {
const headers = {
Accept: "application/json"
};
fetch("https://api.carbonintensity.org.uk/intensity", {
method: "GET",
headers: headers
})
.then((res) => {
return res.json();
})
.then((body) => {
console.log(body.data);
setCarbon(body.data);
});
}, []);
return (
<div>
<p>Track</p>
{carbon.length > 0 amp;amp; (
<div>
{carbon.map((c, i) => (
<p key={i}>
<div>from: {c.from} </div>
<div>to: {c.to}</div>
<div>forecast: {c.intensity.forecast}</div>
<div>actual: {c.intensity.actual}</div>
<div>index: {c.intensity.index}</div>
</p>
))}
</div>
)}
</div>
);
}
Ответ №3:
Вот, пожалуйста, помните, что состояние-это как место для хранения данных для вашего компонента. Когда вы используете fetch, вы получаете данные, и теперь вам нужно сохранить их в своем состоянии. Если вы используете состояние внутри вашего JSX, вы можете получить информацию для отображения. Проверьте журнал консоли, чтобы просмотреть структуру данных, возвращаемую из выборки. Это то, что устанавливается в состояние «данные». Это можно назвать как угодно. Вы можете перебирать его и динамически отображать данные в JSX, если хотите, но я просто жестко закодировал его для вас, чтобы его было легче понять.
const [data, setData] = useState([]);
useEffect(() => {
fetch("https://api.carbonintensity.org.uk/intensity", {
method: "GET",
headers: {
"Content-Type": "application/json"
}
})
.then((res) => res.json())
.then((data) => setData(data))
.catch((e) => console.error(e));
}, []);
console.log("data:", data);
return (
<div>
<p>Track</p>
<div>
<p>From: {data.data["0"].from}</p>
<p>To: {data.data["0"].to}</p>
<div>Intensity:</div>
<p>forecast: {data.data["0"].intensity.forecast}</p>
<p>forecast: {data.data["0"].intensity.actual}</p>
<p>forecast: {data.data["0"].intensity.index}</p>
</div>
</div>
);