Siemka, mam taki problem, korzystam sobie z tego API: https://openweathermap.org/forecast5. Wszystko ładnie pobieram fetchem, gdzie po pobraniu i wyodrębnieniu danych, "porządkuję" sobie każdy dzień do osobnego obiektu, którego właściwościami są poszczególnie godziny. Wszystko jest ok do momentu, gdy próbuję się odwołać do właściwości obiektu w komponencie dziecka, robię to przy pomocy notacji tablicowej (co nie jest chyba zbyt dobrą praktyką?), ponieważ robię to po kluczach.Mogę się bezproblemowo odwołać do każdego obiektu w console.log() i nie dzieje się nic złego dopóki nie próbuję odwołać się dalej do wnętrza obiektu wtedy dostaje błąd, że dana właściwość jest undefined.
Tak wyglądają dane po uporządkowaniu ich tak jak chce:
Tutaj pobieram i formatuje dane:
componentDidUpdate(prevProps, prevState) {
if (prevState.value !== this.state.value) {
const API = `https://api.openweathermap.org/data/2.5/forecast?q=${this.state.value}&appid=${APIkey}&units=metric`
fetch(API)
.then(response => {
if (response.ok) {
this.setState((
{ loaded: true, }
))
return response.json()
}
this.setState((
{ loaded: false, }
))
})
.then(data => {
if (data) {
let days = []
const cityName = data.city.name
/*Wstawiamy do tablicy days każdy dzień, jako odrębny obiekt, którego
właściwościami są poszególne godziny*/
for (let i = 0; i <= 5; ++i) {
const actualDay = new Date().getDate()
days.push({
...data.list.filter(element => {
const elementDay = new Date(element.dt_txt).getDate()
if (elementDay === actualDay + i)
return element
else return null
})
})
}
this.setState(prevState => (
{
cityName: prevState.cityName = cityName,
days: prevState.days = days,
}));
}
})
.catch(err => { throw Error(err) })
}
}
"Problematyczny" komponent:
import React from 'react';
import './Result.css';
import Day from './Day';
const Result = props => {
//Takie coś działa
console.log(props.days["0"])
return (
<div className="result">
<div className="today-temp">
<h1>°</h1>
<p className="city">{props.city}</p>
</div>
<ul className="other-days">
<Day />
</ul>
</div>
);
}
export default Result;
Próbowałem również bawić się destrukturyzacją i dostawałem się dosyć głęboko do obiektu, ale i tak w pewnym momencie wyrzucało mi errora, że dana wartość jest undefined.