์๋ฒ์ GET, POST ์์ฒญ์ ํ ๋ ์๋ก๊ณ ์นจ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ๋์์ฃผ๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ์ AJAX๋ผ๊ณ ํ๋ค.
GET, POST ์ค ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๋ณด๋ผ ์ง ์ ํ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ ๋ฐ์์ฌ ๋๋
get์ฌ์ฉ, ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋post๋ฅผ ์ฌ์ฉํ๋คURLํ์์ ์ ์ง์ผ์ ๋ณด๋ด์ผ ํ๋ค. ์งํค์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋๋ ๋ณด๋ผ ๋๋ ๊ธฐ๋ฅ์ด ์ ์๋ํ์ง ์์ ์ ์๋ค
(1) XMLHttpRequest ๋ฌธ๋ฒ
(2) fetch() ๋ฌธ๋ฒ
(3) axios ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
XMLHttpRequest๋ฅผ ๊ณผ๊ฑฐ์๋ ์ ์ฌ์ฉ๋์ง๋ง ์ ์ ์ฐ๋ ์ด์ ๋ Fetch API๊ฐ ๋ ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค. fetch๋ ES6๋ถํฐ JavaScript์ ๋์
๋ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๋ฐ ๋ฐ๋ก ์ค์นํ์ง ์๊ณ , ์ฌ์ฉํด๋ ๋๊ธฐ ๋๋ฌธ์ axios์ ๋จ์ ์ ๋ณด์ํด์ค ์ ์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ axios๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์ด์ ๋ ์๋์ผ๋ก JSON ๋ณํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ fetch๋ณด๋ค ์ฌ์ฉ์ด ๋ ๊ฐํธํ๋ค. ์ด ์ธ์๋ ์ฅ์ ์ ๋ง๋ค. Promise ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ฌ ๋น๋๊ธฐ ์์
์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.<axios ์ค์น>
(1) ํฐ๋ฏธ๋ > npm install axios
(2) axios import ํด์ค๊ธฐ
(3) axios ์์ฑ๋ฐฉ๋ฒ > axios.get('URL').then((๋งค๊ฐ๋ณ์) => ๋งค๊ฐ๋ณ์)
.get์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ ๋ฐ์์ค๊ณ .then์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋งค๊ฐ๋ณ์ ๊ฐ์ง๊ณ ์์ ๋ ํ๋ฉด์ ๋ ๋๋ง์ด ๋ ๋ด์ฉ์ ๋ณด์ฌ์ค ์ ์๋ค. ๋ณดํต์ result ๋๋ response,res๋ก ๋ง์ด ์ ๋๋ค. โ ๏ธresult๋ผ๊ณ ์ ์์ ๋ ์ถ๋ ฅํด๋ณด๋ฉด ๋ด๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์จ ๊ฒ์ด ์๋ ์๋ฒ ์ฑ๊ณต์ฌ๋ถ์ ๋ํ ๋ด์ฉ, ๋ค๋ฅธ ํ์ํ์ง ์์ ๋ด์ฉ๋ค๋ ๊ฐ์ด ๊ฐ์ง๊ณ ์ค๊ธฐ ๋๋ฌธ์ ๋ฐํํ ๋๋ result.data ๋ผ๊ณ ์ ์ด์ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฐ์ ์ ์๊ฒ ๋ถ๋ฌ์ค๋ฉด ๋๋ค. ์๋๋ ์์์ธ๋ฐ ์ฐธ๊ณ ํ๋ฉด ...import axios from "axios"; //axios import ํ๊ธฐ
const onClick = () => {
axios.get("URL").then((result) => result.data);
};
(4) ๊ฒฝ๋ก ์์ฑ์ด๋ ๋ค๋ฅธ ๊ฒ ์๋ชป๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ajax ์์ฒญ์ ์คํจ ํ ์๋ ์๋ค. ๊ทธ๋ด ๋์๋ .catch() ๋ฅผ ์ฌ์ฉํด์ ์๋ชป๋ ๋ถ๋ถ์ด ์์ ๋ ๋ณด์ฌ์ง ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
import axios from "axios"; //axios import ํ๊ธฐ
const onClick= () => {
axios.get("URL")
.then((result) => {
return result.data;
})
.catch(() => {
// ์๋ฌ ๋ฐ์ ์ ๊ธฐ๋ณธ๊ฐ์ด๋ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ์ถ๊ฐ
});
}}

//App.jsx
import axios from "axios";
import data from "./data";
function App() {
const [shoes, setShoes] = useState(data);
const fileData = (number) => {
axios
.get(`https://codingapple1.github.io/shop/data${number}.json`)
.then((result) => {
const copy = [...shoes, ...result.data];
setShoes(copy);
});
};
const onClickAddItems = () => {
if (shoes.length === 3) {
fileData(2);
} else if (shoes.length === 6) {
fileData(3);
} else if (shoes.length === 9) {
alert("์ํ์ด ์์ต๋๋ค");
}
};
return (
<div className="App">
<Button variant="secondary" onClick={onClickAddItems}>
๋๋ณด๊ธฐ
</Button>
</div>
);
}
export default App;
axios๋ฅผ ๊ณ์ ์กฐ๊ฑด๋ฌธ์ ์ฐ๊ธฐ์๋ ์ฝ๋๋ ๊ธธ์ด์ง๊ณ , ๋ณด๊ธฐ์๋ ๋ถํธํ๋ค. ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ 2โก๏ธ3์ผ๋ก๋ง ๋ณ๊ฒฝ๋๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ณ์ number๋ฅผ ๋ฃ์ด์คฌ๊ณ , ์ธ์๋ก ๊ทธ์ ๋ง๋ 2, 3์ ๋ฃ์ด์คฌ๋ค.