[ToyProject-Todomate] ํˆฌ๋‘๋ฉ”์ดํŠธ ํด๋ก  ํ”„๋กœ์ ํŠธ 32

2022. 1. 26. 19:17ใ†WEB Dev/ToyProject

728x90


๐Ÿ”ท CloneTodo โ˜‘ - Todomate Clone Project  |  Team CloneMate

 

CloneTodo : ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํˆฌ๋‘๋ฉ”์ดํŠธ๋ฅผ ํด๋ก ํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ด๋ณด๋Š” ํ”„๋กœ์ ํŠธ

 


 

 

์ด๋ฒˆ์—” ๋น„๋™๊ธฐ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

๋ณ„๋„ ์„ค์น˜ํ•  ํ•„์š” ์—†๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ์ด ์žˆ์ง€๋งŒ(HTTP Client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : HTTP ์ƒ์—์„œ ํ†ต์‹ ์„ ํ•˜๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ) ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด๋ณด์ด๋Š” axios๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค.

 

axios๋Š” yarn์ด๋‚˜ npm์„ ํ†ตํ•ด ์ž‘์—…์˜์—ญ์— ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด ๋‹จ์ ์ด๋‹ค.

์ถ”์ฒœํ•ด์ฃผ์‹  fetch๋„ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์กฐ๊ธˆ ๋” ๋งŽ์€ axios๋กœ ์„ ํƒํ–ˆ๊ณ  

ํŒŒ์ผ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด api์™€ ํ†ต์‹ ํ•˜๋Š” ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

Recoil ์—์„œ๋„ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ฃผ๊ณ  ์žˆ๋Š”๋ฐ ์ด๊ฑธ ์“ฐ๊ธฐ์—” ์•„์ง ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ง€์‹์ด ๋ชจ์ž๋ผ์„œ ...

 

 


 

1. axios ์„ค์น˜ํ•˜๊ธฐ

 

axios๋Š” ๋น„๋™๊ธฐ ํ†ต์‹  ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์— yarn์ด๋‚˜ npm ์„ ํ†ตํ•ด ์„ค์น˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•œ๋‹ค.

 

 

//npm
npm install axios
//axios
yarn add axios

 

 

๊ทธ๋ฆฌ๊ณ  ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ - ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์ค€๋‹ค.

๋‚˜๋Š” api - getApis.js ๋ผ๋Š” ์ด๋ฆ„์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. 

 

 

 

 

 

API์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘์— ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

GET : API์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด GET ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. 
POST : API๋กœ ์ •๋ณด๋ฅผ ์ „์†กํ•ด ๊ฐ’์ด๋‚˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด POST ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
DELETE : ๋ฌด์–ธ๊ฐ€๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด DELETE ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

 

์ฟผ๋ฆฌ๋กœ ๋”ฐ์ง€๋ฉด GET์€ SELECT, POST๋Š” UPDATE, PUT, PATCH, DELETE๋Š” DELETE ๋‹ค.

 

 

์šฐ์„  ๋ฌด์–ธ๊ฐ€๋ฅผ GET ๋ฐฉ์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์™€๋ณด์ž.

 

 

 

2. axios ์‹œ์ž‘ํ•˜๊ธฐ

 

 

์•„๊นŒ ๋งŒ๋“  getApis ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ƒ๋‹จ์— axios๋ฅผ import ํ•ด์ค€๋‹ค. 

 

import axios from 'axios';

 

 

์šฐ๋ฆฌ๋Š” ์•„์ง API๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ์˜ ํ…Œ์ŠคํŠธ api๋ฅผ ํ•˜๋‚˜ ์–ป์–ด์˜จ๋‹ค. 

(์ฒ˜์Œ์—๋Š” ๋กœ์ปฌ์— data/data.json ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์‹œ๋„ํ–ˆ์œผ๋‚˜ ๋กœ์ปฌ์—์„œ axios๋กœ json์„ ๋ฐ›์•„์˜ฌ ์ˆ˜๋Š” ์—†๋‹ค๊ณ  ํ•œ๋‹ค. ์ฐธ๊ณ ํ•  ๋ธ”๋กœ๊ทธ๋Š” ์—ฌ๊ธฐ)

 

jsonPlaceHolder ์„œ๋น„์Šค์—์„œ ์ƒ˜ํ”Œ API๋ฅผ ํ•˜๋‚˜ ๋”ฐ์™”๋‹ค.

 

https://jsonplaceholder.typicode.com/users/1

 

์œ„์˜ URL์— ์š”์ฒญํ•˜๋Š” axios ํ•จ์ˆ˜๋ฅผ getApis ํŒŒ์ผ์— ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

import axios from 'axios';

export default function getResources () {
  //axios
  axios.get('https://jsonplaceholder.typicode.com/users/1')
  .then((Response)=>{console.log(Response.data)})
  .catch((Error)=>{console.log(Error)})
}

 

 

์œ„์˜ getResources ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค ์‹ ํ˜ธ๋ฅผ ์ค˜์•ผ ํ•˜๋Š”๋ฐ useEffect ๋‚˜ onClick๋“ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์— ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ import ํ•ด๋ณด์ž

 

๋‚˜๋Š” ์ด์ „์— ๋งŒ๋“ค์–ด๋‘” Goals ์ปดํฌ๋„ŒํŠธ์— ๋„ฃ์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

์•„๋ž˜์˜ import ๋ฌธ์„ ์ƒ๋‹จ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

import getResources from '../api/getApis';

 

 

๊ทธ๋ฆฌ๊ณ  Goals ์ปดํฌ๋„ŒํŠธ ์•ˆ์— useEffect๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

useEffect๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” react์—์„œ useEffect๋ฅผ import ํ•ด์™€์•ผ ํ•œ๋‹ค.

 

 

import React, { useEffect } from "react";
import getResources from '../api/getApis';

export default function Goals(props) {

  useEffect(()=>{getResources()})
    
}

 

 

์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด Goals ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ (๋ Œ๋”๋ง ๋  ๋•Œ) getResources ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

 

 

 

 

 

์ด์ œ ๋ณ„๋„์˜ ํŒŒ์ผ์—์„œ axios ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด GET์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

728x90