将 API 数据设置为状态
Set API data to state
我正在从 api 中检索数据并仅过滤掉我需要的数据。我正在尝试将检索到的对象设置为状态。尽管
只有最后一个对象被设置为 state
axios.get('http://api.openweathermap.org/data/2.5/forecast?zip=90210&APPID=MY_KEY&units=imperial')
.then(res => {
var data = res.data;
var city = res.data.city.name;
for (var i = 0; i < data.list.length; i += 8) {
const filteredData = {
city,
date: data.list[i].dt_txt,
expectedTemp: data.list[i].main.temp,
minTemp: data.list[i].main.temp_min,
maxTemp: data.list[i].main.temp_max,
description: data.list[i].weather[0].main,
icon: data.list[i].weather[0].icon,
id: data.list[i].weather[0].id
};
this.setState({ data: filteredData });
}
console.log(this.state.data);
})
.catch(err => console.log(err));
之所以只设置最后一个,是因为在每个循环中,您都覆盖了 setState
。你应该做的是将它保存在一个数组中,然后 setState
与该数组。
axios.get('http://api.openweathermap.org/data/2.5/forecast?zip=90210&APPID=badca0372074fc97fb1ceb2c2359eff5&units=imperial')
.then(res => {
var data = res.data;
var city = res.data.city.name;
let filteredDataArray = [] // data array
for (var i = 0; i < data.list.length; i += 8) {
const filteredData = {
city,
date: data.list[i].dt_txt,
expectedTemp: data.list[i].main.temp,
minTemp: data.list[i].main.temp_min,
maxTemp: data.list[i].main.temp_max,
description: data.list[i].weather[0].main,
icon: data.list[i].weather[0].icon,
id: data.list[i].weather[0].id
};
filteredDataArray.push(filteredData) // add to the array
}
this.setState({ data: filteredDataArray }); // setState with the data array
console.log(this.state.data);
})
.catch(err => console.log(err));
我正在从 api 中检索数据并仅过滤掉我需要的数据。我正在尝试将检索到的对象设置为状态。尽管
只有最后一个对象被设置为 stateaxios.get('http://api.openweathermap.org/data/2.5/forecast?zip=90210&APPID=MY_KEY&units=imperial')
.then(res => {
var data = res.data;
var city = res.data.city.name;
for (var i = 0; i < data.list.length; i += 8) {
const filteredData = {
city,
date: data.list[i].dt_txt,
expectedTemp: data.list[i].main.temp,
minTemp: data.list[i].main.temp_min,
maxTemp: data.list[i].main.temp_max,
description: data.list[i].weather[0].main,
icon: data.list[i].weather[0].icon,
id: data.list[i].weather[0].id
};
this.setState({ data: filteredData });
}
console.log(this.state.data);
})
.catch(err => console.log(err));
之所以只设置最后一个,是因为在每个循环中,您都覆盖了 setState
。你应该做的是将它保存在一个数组中,然后 setState
与该数组。
axios.get('http://api.openweathermap.org/data/2.5/forecast?zip=90210&APPID=badca0372074fc97fb1ceb2c2359eff5&units=imperial')
.then(res => {
var data = res.data;
var city = res.data.city.name;
let filteredDataArray = [] // data array
for (var i = 0; i < data.list.length; i += 8) {
const filteredData = {
city,
date: data.list[i].dt_txt,
expectedTemp: data.list[i].main.temp,
minTemp: data.list[i].main.temp_min,
maxTemp: data.list[i].main.temp_max,
description: data.list[i].weather[0].main,
icon: data.list[i].weather[0].icon,
id: data.list[i].weather[0].id
};
filteredDataArray.push(filteredData) // add to the array
}
this.setState({ data: filteredDataArray }); // setState with the data array
console.log(this.state.data);
})
.catch(err => console.log(err));