Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ์๋ฐ
- css
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์นํผ๋ธ๋ฆฌ์ฑ
- ์ปดํจํฐ๊ณผํ
- Java
- ์ฝ๋ฉ
- JavaScript
- K๋ฐฐํฐ๋ฆฌ
- ์ค๋ผํด
- ๋ฐ์ํ
- ์ฑ
- ํ๋ก๊ทธ๋๋ฐ
- ํ์ด์ฌ
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ComputerScience
- database
- ๋ผํ๋ผ์ค์๋ง๋
- ์ค๋ธ์
- ๊ฐ๋ฐ
- ์ํ
- ๋ ์
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๋ฆฌ์กํธ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Python
- html
Archives
- Today
- Total
JiYoung Dev ๐ฅ
[React] useEffect๋ฅผ ํตํด openAPI ๊ฐ์ ธ์ค๊ธฐ (Fetch, Axios)(2023.05.26) ๋ณธ๋ฌธ
full stack/React
[React] useEffect๋ฅผ ํตํด openAPI ๊ฐ์ ธ์ค๊ธฐ (Fetch, Axios)(2023.05.26)
Shinjio 2023. 5. 29. 17:52๐ ์ํ API ๋ถ๋ฌ์ค๊ธฐ
- fetch, Axios ์ฌ์ฉ
import React, { useEffect, useState } from "react";
import axios from "axios";
import "./App.css";
const Ex04 = () => {
let movieUrl =
"http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20230501";
/**
* ํ๋ฉด์ ์ํ ๋ญํน์ ๋์ด์ฃผ์!
*
* jQuery + Ajax >>>>> ๋
ผ์ธ! (์ฌ์ฉ์ถ์ฒX ์๋ ๋๋ฆผ)
* Fecth API (New!)
* >> ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ API
* >> ๋ณ๋์ ์ค์น๋ฅผ ํ์๋ก ํ์ง ์์
* Axios (New!) >>>>> ๋๋ถ๋ถ react์์ ์ ํธํจ
*
* ๊ณตํต์ : ๋คํธ์ํฌ ์์ฒญ์ ์ํด ์ฌ์ฉํ๋ API
*/
/* ์ API๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๊ฒ์ useEffect ์์ ๋ฃ์ด์ค๊น?
- useEffect์ ์์๋ ํ๋ฉด์ด ๋ง์ดํธ ๋ ํ!
- ํ๋ฉด์ด ๋จผ์ ๋จ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ฌ ๊ฐ
- ์ฌ์ฉ์์ ์
์ฅ์์ ์กฐ๊ธ ๋ ๋น ๋ฅธ ํ๊ฒฝ์ ์ ๊ณต
*/
const [list, setList] = useState([]);
useEffect(() => {
// Case 1) Fetch API ์ฌ์ฉ
// fetch(movieUrl)
// .then((res) => res.json()) //๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ json ํ์์ ๋ฐ์ดํฐ๋ก ๋ฐํ
// .then((res) => {
// console.log("fetch res:", res.boxOfficeResult.dailyBoxOfficeList);
// //Q.fetch API๋ก ๊ฐ์ง๊ณ ์จ ๊ฐ์ 1~10์๊น์ง ํ๋ฉด์ ๋์์ฃผ์
// // ์์. ์ํ์ ๋ชฉ - ๊ฐ๋ด์ผ์
// setList(res.boxOfficeResult.dailyBoxOfficeList);
// })
// .catch(() => {
// console.error("error!");
// });
/**
* Case 2) Axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ
* (1) axios ์ค์น - npm install axios >> npm i axios
* (2) import axios from 'axios'
*
*/
axios
.get(movieUrl)
.then((res) => {
console.log("Axios res :", res.data.boxOfficeResult.dailyBoxOfficeList); //json์ผ๋ก ๋์ด์ด
setList(res.data.boxOfficeResult.dailyBoxOfficeList);
})
.catch(() => console.error("error!"));
/**
* Axios vs Fetch
* (1) Fetch
* - ์ฅ์
* a. js์ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ! ๊ตณ์ด ์ค์นํ๊ฑฐ๋ importํ ํ์๊ฐ ์๋ค
* b. ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์
๋ฐ์ดํธ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
*
* - ๋จ์
* a. ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์กด์ฌํ์์ (IE11) >> jQuery + Ajax๊ฐ ํฅํ๋ ์ด์ !
* b. JSON์ผ๋ก ๋ณํํด์ฃผ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
* c. axios์ ๋นํด ๊ธฐ๋ฅ์ด ์ ๋ค.
*
* (2) Axios
* - ์ฅ์
* a. ๊ธฐ๋ฅ์ด ๋ง๋ค.
* b. ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ต์ ํ (๋ค์ํ ๋ธ๋ผ์ฐ์ ์ง์)
* - ๋จ์
* a. ์ค์น ํ์
*/
}, []);
return (
<div className="container">
<h1>์ํ์์</h1>
{list.map((item) => (
<p>
{item.rank} {item.movieNm} - {item.openDt}
</p>
))}
</div>
);
};
export default Ex04;
๐ axios๋ก ๋ ์จ API ๊ฐ์ ธ์ค๊ธฐ
import React, { useEffect, useState } from "react";
import axios from "axios";
import "./Ex05.css";
const Ex05 = () => {
/**
* https://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}
* key : d98ae2c3057b1f588501393dc077fc5f
*/
let cityList = ["gwangju", "seoul", "busan"];
const [city, setCity] = useState("gwangju");
const [temp, setTemp] = useState("0");
const [icon, setIcon] = useState("");
const [cloud, setCloud] = useState("");
const getCity = (e)=>{
setCity(e.target.innerText)
}
const getData = () => {
console.log("get data");
let url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=d98ae2c3057b1f588501393dc077fc5f`;
axios.get(url).then((res) => {
console.log("res :", res.data.weather[0].icon);
// ์จ๋ ์ธํ
: ์ผ๋น์จ๋ - 273 = ์ญ์จ์จ๋
setTemp((res.data.main.temp - 273).toFixed(1));
// ๊ตฌ๋ฆ ์ธํ
if (res.data.clouds.all > 90) {
setCloud("๋งค์ฐ ํ๋ฆผ");
} else if (res.data.clouds.all > 60) {
setCloud("ํ๋ฆผ");
} else {
setCloud("๋ง์");
}
// ์์ด์ฝ ์ธํ
setIcon(
`https://openweathermap.org/img/wn/${res.data.weather[0].icon}@2x.png`
);
});
};
/**์์ ์ฝ๋
*
* Mission!
* ๋ฒํผ์ ํด๋ฆญํ์ ๋ ํด๋น ๋์๋ก ๋ ์จ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋๋ก ํด๋ณด์
* 1. ๋ฒํผ์ ํด๋ฆญํ์ ๋ >> getCity๋ผ๋ ํจ์๋ก ์ด๋ >> city์ ์ด๋ฆ์ setting
* 2. city์ ์ด๋ฆ์ด ๋ณํ์ ๋, city์ ๋ง๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋๋ก
* 3. ๋จ, ์๋ฌด๊ฒ๋ ํด๋ฆญํ์ง ์๊ณ ๋จ์ํ ํ๋ฉด์ด ๋ฌ ์ํ๋ผ๋ฉด gwangju์ ๋ฐ์ดํฐ ๋ฐ์์ค๊ธฐ
*
*/
useEffect(() => {
getData();
}, [city]);
return (
<div className="weather-container">
<div className="weather-item">
<h1>์ค๋์ ๋ ์จ๐</h1>
<div className="weather-data">
<img src={icon} width="100px"></img>
<h1>{temp}โ</h1>
<h3>{city}</h3>
<h4>{cloud}</h4>
</div>
<div className="button-container">
{cityList.map((item) => (
<button onClick={getCity} key={item}>{item}</button>
))}
</div>
</div>
</div>
);
};
export default Ex05;
'full stack > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์นด์นด์ค์ง๋API ์ฌ์ฉํ๊ธฐ (2023.06.05) (0) | 2023.06.05 |
---|---|
[React] session/local storage์ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ (2023.06.05) (0) | 2023.06.05 |
[React] ์ฐธ์ฐธ์ฐธ ๊ฒ์ ๋ง๋ค๊ธฐ (2023.05.26) (0) | 2023.05.29 |
[React] Lifecycle (2023.05.24) (0) | 2023.05.24 |
[React] useRef (2023.05.24) (0) | 2023.05.24 |