Когда вы делаете:
setWeather(weather.concat(temp));
Переменная weather
не гарантируется для обновления. Передайте предыдущее значение состояния, чтобы сделать объединение:
setWeather((previousWeatherState) => [...previousWeatherState, temp])
Конечный код useEffect
будет:
useEffect(() => {
countries.forEach(country => {
axios
.get(`http://api.openweathermap.org/data/2.5/weather?q=${country.capital}&units=metric&APPID=myAPI`)
.then(response => {
const temp = response.data.main.temp
setWeather((previousWeatherState) => [...previousWeatherState, temp])
})
})
}, [countries])