[React] ๋น„๋™๊ธฐ ํ†ต์‹  - axios

2024. 2. 20. 20:54ยท๐Ÿชด React
SMALL

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;
SMALL

'๐Ÿชด React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] json-server์˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐ”๋€ sort-order ๋ฐฉ์‹ ํŽ˜์ด์ง€๋„ค์ด์…˜ ์š”์ฒญ ( - ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ)  (0) 2024.02.23
[React] ๊ฐœ์ธํ”„์  ์—๋Ÿฌ : VITE ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์ฃผ์˜ & ๋ฆฌ๋•์Šค ๋ชจ๋“ˆ์—์„œ state๋กœ ์œ„์น˜ ์ž˜ ์“ฐ๊ธฐ  (0) 2024.02.22
[React/Vite] ์—๋Ÿฌํ•ด๊ฒฐ: Vite ํ”„๋กœ์ ํŠธ .env ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” process.env => import.meta.env๋กœ ์จ์ฃผ๊ธฐ  (0) 2024.02.21
[React] ๋น„๋™๊ธฐ ํ†ต์‹  - fetch (+ axios์— ๋น„ํ•ด ๋ถˆํŽธํ•œ ์ )  (0) 2024.02.19
[React] ๋ฌธ์ œํ•ด๊ฒฐ: e.target์˜ className ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ => classList์ธ๋ฑ์Šค๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ or ๊ทธ๋ƒฅ id์“ฐ๊ธฐ (+DOMTokenList)  (0) 2024.02.09
'๐Ÿชด React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [React] ๊ฐœ์ธํ”„์  ์—๋Ÿฌ : VITE ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์ฃผ์˜ & ๋ฆฌ๋•์Šค ๋ชจ๋“ˆ์—์„œ state๋กœ ์œ„์น˜ ์ž˜ ์“ฐ๊ธฐ
  • [React/Vite] ์—๋Ÿฌํ•ด๊ฒฐ: Vite ํ”„๋กœ์ ํŠธ .env ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” process.env => import.meta.env๋กœ ์จ์ฃผ๊ธฐ
  • [React] ๋น„๋™๊ธฐ ํ†ต์‹  - fetch (+ axios์— ๋น„ํ•ด ๋ถˆํŽธํ•œ ์ )
  • [React] ๋ฌธ์ œํ•ด๊ฒฐ: e.target์˜ className ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ => classList์ธ๋ฑ์Šค๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ or ๊ทธ๋ƒฅ id์“ฐ๊ธฐ (+DOMTokenList)
๋ จ๋””
๋ จ๋””
FE - ๊ฐœ๋ฐœ ๊ณต๋ถ€์˜ ๊ธฐ๋ก
  • ๋ จ๋””
    Ryeon's Devstory
    ๋ จ๋””
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (69)
      • ๐Ÿชด JavaScript & TypeScript (11)
        • ๐Ÿงฉ Algorithm (6)
      • ๐Ÿชด React (12)
      • ๐Ÿชด Next.js (8)
      • ๐Ÿชด HTML & CSS (2)
      • ๐Ÿชด DB & BaaS (5)
      • ๐Ÿชด Git &Github (0)
      • โœ๏ธ ํ”„๋กœ์ ํŠธ ๊ณผ์ • & ํšŒ๊ณ  (18)
      • โœ๏ธ Today what I Learned _T.. (11)
      • ๐Ÿ•Š๏ธ IT ์•„ํ‹ฐํด (0)
      • etc. (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • My Github ๐Ÿ˜บ
    • ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ๐ŸŽต๐ŸŽง (์ผ์ƒ,์Œ์•… ๋“ฑ)
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ปดํฌ๋„ŒํŠธ๋ถ„๋ฆฌ
    Next.js
    State
    Vite
    Supabase
    reacthook
    ๋ฆฌ์•กํŠธ์ฟผ๋ฆฌ
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    json-server
    ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
    useMutation
    ํ‹ฐ์Šคํ† ๋ฆฌ๋ธ”๋กœ๊ทธ์Šคํ‚จ
    Array.filter
    tailwind
    BAAS
    fetch
    ๋น„๋™๊ธฐํ†ต์‹ 
    ์˜์กด์„ฑ๋ฐฐ์—ด
    ์˜ค๋ธ”์™„
    axios
    NVM
    ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ
    ์›น๊ฐœ๋ฐœ ๊ธฐ์ดˆ
    ๋ Œ๋”๋งํŒจํ„ด
    ์—๋Ÿฌ
    props
    useEffect
    react
    route handler
    reactquery
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
๋ จ๋””
[React] ๋น„๋™๊ธฐ ํ†ต์‹  - axios
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”