240220 TIL ๐โ๏ธ
์ ๋ฒ ๊ธ์์, ๋น๋๊ธฐ ํต์ ๋ฐฉ๋ฒ ์ค fetch์ axios ๊ฐ ์๋ค๊ณ ์๊ฐํ๊ณ fetch์ ๋ํด ์์๋ดค์๋ค.
fetch๋ axios์ ๋นํด ๋ถํธํ ์ ์ด ์์๋๋ฐ (json์ผ๋ก ๋ฐ๋ก ๋ณํํด์ค์ผ ํ๊ฑฐ๋ ์๋ฌ ์ฒ๋ฆฌ ๋ฑ์ ์์ด์)
axios๋ ๊ทธ์ ๋นํด ๊ธฐ๋ฅ์ ์ฅ์ ์ด ์์ด์, ์ง๊ธ ์งํํ๋ ํ๋ก์ ํธ๋ ์์ผ๋ก ๋ง์ด ํ์ฉํด๋ณผ ๊ฒ ๊ฐ๋ค!
* Axios ๋
node.js์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ Promise ๊ธฐ๋ฐ http ํด๋ผ์ด์ธํธ.
http๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ํต์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํจํค์ง
- ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ๋ fetch์ ๋ฌ๋ฆฌ, axios๋ ํจํค์ง ์ค์น๋ฅผ ๋ฐ๋ก ํด์ค์ผ ํ๋ค. ์๋ ๋ช ๋ น์ด๋ก ์ค์นํด์ฃผ๊ธฐ!
yarn add axios ํน์ npm install axios
- ์ฌ์ฉํ๋ ค๋ฉด ํจํค์ง ์ค์น ํ import ํด์ ์ฐ๋ฉด ๋๋ค
import axios from "axios";
axios์ ๋ฉ์๋
์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํ ๊ฑด์ง ์์ฒญํ๋ ๋ฐฉ์์ ๋ฐ๋ผ
ํฌ๊ฒ axios - get, post, patch, delete ๋ฐฉ์์ผ๋ก ๋๋ ์ ์ฌ์ฉํด๋ณผ ์ ์๋ค.
์๋ ์ฝ๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉฐ, url์ ์๋ฒ ๋ฐ์ดํฐ ์ฃผ์ url (json-server url์ฒ๋ผ)์, config์๋ ๊ธฐํ ์ฌ๋ฌ ์ค์ ์ ์ถ๊ฐ ๊ฐ๋ฅ.
config์ ๋ํด์๋ ์๋์ axios ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๊ธฐ!
https://axios-http.com/kr/docs/req_config
get - ์๋ฒ ๋ฐ์ดํฐ ์กฐํ ์์ฒญ (READ)
axios.get(url[, config]) // GET
post - ์๋ฒ์ ๋ฐ์ดํฐ ์ถ๊ฐ ์์ฒญ (CREATE)
axios.post(url[, data[, config]]) // POST
patch - (๋ณดํต) ์๋ฒ์ ํน์ ๋ฐ์ดํฐ ์์ ์์ฒญ (UPDATE)
axios.patch(url[, data[, config]]) // PATCH
delete - ์๋ฒ์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์ญ์ ์์ฒญ (DELETE)
axios.delete(url[, config]) // DELETE
- json-server์ ์๋ฒ๋ฐ์ดํฐ์ axios๋ฅผ ํ์ฉํด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณผ ์ ์๋ค.
(axios.get ํ์ฉํ๊ธฐ)
๊ฐ์์๋ฃ์์ ๊ฐ์ ธ์จ ๊ฑฐ๊ธด ํ์ง๋ง ..ใ ใ
ํฌ๋๋ฆฌ์คํธ ๋ง๋๋ ์์์ฝ๋์ธ๋ฐ, axios.get์ ํตํด json-server ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ (์กฐํ)
useState๋ฅผ ์จ์ setTodos ๋ ํด์ค๋ค. (์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ todos์ setํด์ฃผ๊ธฐ!)
// src/App.js
import React, { useEffect, useState } from "react";
import axios from "axios";
const App = () => {
const [todos, setTodos] = useState(null);
// axios๋ฅผ ํตํด์ get ์์ฒญ์ ํ๋ ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
// ๋น๋๊ธฐ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ฏ๋ก async/await ๊ตฌ๋ฌธ์ ํตํด์ ์ฒ๋ฆฌํฉ๋๋ค.
const fetchTodos = async () => {
const { data } = await axios.get("http://localhost:3001/todos");
setTodos(data); // ์๋ฒ๋ก๋ถํฐ fetchingํ ๋ฐ์ดํฐ๋ฅผ useState์ state๋ก set ํฉ๋๋ค.
};
// ์์ฑํ ํจ์๋ฅผ ์ปดํฌ๋ํธ๊ฐ mount ๋์ ๋ ์คํํ๊ธฐ ์ํด useEffect๋ฅผ ์ฌ์ฉํฉ๋๋ค.
useEffect(() => {
// effect ๊ตฌ๋ฌธ์ ์์ฑํ ํจ์๋ฅผ ๋ฃ์ด ์คํํฉ๋๋ค.
fetchTodos();
}, []);
// data fetching์ด ์ ์์ ์ผ๋ก ๋์๋์ง ์ฝ์์ ํตํด ํ์ธํฉ๋๋ค.
console.log(todos); // App.js:16
return <div>App</div>;
};
export default App;