Skip to content

Commit 95e35e7

Browse files
committed
weather
1 parent 0b52b0f commit 95e35e7

File tree

4 files changed

+73
-9
lines changed

4 files changed

+73
-9
lines changed

src/components/CurrentWeather.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,25 @@ import { getWeatherDescription } from "../utils/weather";
88

99
const CurrentWeather = ({ weatherData, isLoading }) => {
1010
if (isLoading) {
11-
return <div>채워주세요</div>;
11+
return <div>날씨 정보를 불러오는 중...</div>;
1212
}
1313

14-
return <div>채워주세요</div>;
14+
let temperature = null; // let 값 변경 가능, 재선언 불가
15+
let code = null;
16+
if (weatherData && weatherData.hourly) {
17+
temperature = weatherData.hourly.temperature_2m[0];
18+
code = weatherData.hourly.weather_code[0];
19+
}
20+
// 실제 날씨 정보 꺼냄
21+
22+
return (
23+
<div>
24+
<CurrentWeatherWrapper>
25+
<Temperature>{temperature}°C</Temperature>
26+
<WeatherCode>{getWeatherDescription(code)}</WeatherCode>
27+
</CurrentWeatherWrapper>
28+
</div>
29+
);
1530
};
1631

1732
export default CurrentWeather;

src/components/DailyForecast.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,17 @@ import { getWeatherDescription, formatDailyData } from "../utils/weather";
55
const DailyForecast = ({ weatherData }) => {
66
const dailyData = formatDailyData(weatherData);
77

8-
return <div>채워주세요</div>;
8+
return (<div>
9+
<DailyForecastWrapper>
10+
{dailyData.map((item,index)=>(
11+
<DailyItem key={index}>
12+
<div>{item.date}</div>
13+
<div>{getWeatherDescription(item.code)}</div>
14+
<div>{item.temperature}°C</div>
15+
</DailyItem>
16+
))}
17+
</DailyForecastWrapper>
18+
</div>);
919
};
1020

1121
export default DailyForecast;

src/components/HourlyForecast.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,17 @@ import { getWeatherDescription, formatHourlyData } from "../utils/weather";
55
const HourlyForecast = ({ weatherData }) => {
66
const hourlyData = formatHourlyData(weatherData);
77

8-
return <div>채워주세요</div>;
8+
return (<div>
9+
<HourlyForecastWrapper>
10+
{hourlyData.map((item, index) => (
11+
<HourlyItem key={index}>
12+
<div>{item.time}</div>
13+
<div>{item.temperature}°C</div>
14+
<div>{getWeatherDescription(item.code)}</div>
15+
</HourlyItem>
16+
))}
17+
</HourlyForecastWrapper>
18+
</div>);
919
};
10-
20+
// map(요소,순서): 배열의 각 요소를 하나씩 꺼내서 새로운 배열로 만들어줌, JSX 형태로 바꿔줌
1121
export default HourlyForecast;

src/utils/weather.js

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,42 @@ export const getWeatherDescription = (code) => {
2020
};
2121

2222
export const formatHourlyData = (weatherData) => {
23+
// API 원시 데이터를 시간별 예보 형식으로 처리
2324
if (!weatherData) return [];
24-
// 밑에 코드 채워주세요
25-
return [];
25+
26+
const times = weatherData.hourly.time;
27+
const temperatures = weatherData.hourly.temperature_2m;
28+
const codes = weatherData.hourly.weather_code;
29+
const result = [];
30+
for (let i = 0; i < 12; i++) {
31+
const str = parseInt(times[i].slice(11, 13), 10) + "시"; // parseInt: 문자열을 정수로 바꿔주는 함수
32+
result.push({
33+
time: str,
34+
temperature: temperatures[i],
35+
code: codes[i],
36+
});
37+
}
38+
return result;
2639
};
2740

2841
export const formatDailyData = (weatherData) => {
2942
if (!weatherData) return [];
30-
// 밑에 코드 채워주세요
31-
return [];
43+
44+
const dates = weatherData.daily.time;
45+
const temperatures = weatherData.daily.temperature_2m_max;
46+
const codes = weatherData.daily.weather_code;
47+
const result = [];
48+
for (let i = 0; i < 7; i++) {
49+
const dateObj = new Date(dates[i]);
50+
const month = dateObj.getMonth() + 1;
51+
const day = dateObj.getDate();
52+
const weekday=dateObj.toLocaleDateString("ko-KR", { weekday: "short" });
53+
const formatdate = `${month}${day}일 (${weekday})`;
54+
result.push({
55+
date: formatdate,
56+
code: codes[i],
57+
temperature: temperatures[i],
58+
});
59+
}
60+
return result;
3261
};

0 commit comments

Comments
 (0)