[React] axios

또띠·2023λ…„ 9μ›” 5일
0

React

λͺ©λ‘ 보기
8/17
post-thumbnail

πŸ“š axios κ΄€λ ¨ 쒋은 κΈ€λ“€ λͺ¨μŒ
πŸ”— axios-http.com
πŸ”— Inpa Dev

μ§€κΈˆκΉŒμ§€ 바닐라 JS건, λ¦¬μ•‘νŠΈκ±΄ λͺ¨λ‘ μ„œλ²„κ°€ μ—†λŠ” ν™˜κ²½μ—μ„œ μž‘μ—…μ„ ν•˜λ‹€ λ³΄λ‹ˆ μƒˆλ‘œκ³ μΉ¨μ„ ν•˜λ©΄ μžλ™μœΌλ‘œ 값이 λ‚ μ•„κ°€κΈ° μΌμ‘€μ˜€λ‹€.

ν•˜μ§€λ§Œ 받은 값을 μ €μž₯ν•  수 μžˆλ‹€λ©΄ μ–Όλ§ˆλ‚˜ μ’‹μ„κΉŒ?

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” μ„œλ²„μ™€ μ†Œν†΅μ„ ν•˜κΈ° μœ„ν•œ 징검닀리λ₯Ό 놓아 쀄, Axios λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž!

πŸ’‘ Axios λž€?

AxiosλŠ” node.js와 λΈŒλΌμš°μ €λ₯Ό μœ„ν•œ Promise 기반 HTTP ν΄λΌμ΄μ–ΈνŠΈ μž…λ‹ˆλ‹€. 그것은 λ™ν˜• μž…λ‹ˆλ‹€(λ™μΌν•œ μ½”λ“œλ² μ΄μŠ€λ‘œ λΈŒλΌμš°μ €μ™€ node.jsμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€). μ„œλ²„ μ‚¬μ΄λ“œμ—μ„œλŠ” λ„€μ΄ν‹°λΈŒ node.js의 http λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)μ—μ„œλŠ” XMLHttpRequestsλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

axios 곡식 ν™ˆνŽ˜μ΄μ§€μ—μ„œλŠ” μœ„μ™€ 같은 μ„€λͺ…을 λ³Ό 수 μžˆλ‹€.
Promise 기반 HTTP ν΄λΌμ΄μ–ΈνŠΈ λΌλŠ” 문ꡬ가 포인트라고 μƒκ°λœλ‹€.

μ‚¬μš©μžλ‘œ λΆ€ν„° 값을 λ°›μ•„μ„œ μ„œλ²„λ‘œ λ³΄λ‚΄μ„œ μ €μž₯ μ‹œν‚¨ ν›„, κ·Έ 값을 λ¦¬μŠ€νŠΈν™” ν•΄μ„œ 화면에 뿌렀주고
μ›ν•˜λŠ” 값을 μΆ”κ°€, μˆ˜μ •, μ‚­μ œκΉŒμ§€...! 이 λͺ¨λ“  κ±Έ CRUD라고 ν•œλ‹€.

πŸ€” 그럼 CRUDλŠ” 뭘까?

λŒ€λΆ€λΆ„μ˜ 컴퓨터 μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ°€μ§€λŠ” 기본적인 데이터 처리 κΈ°λŠ₯인 Create(생성), Read(읽기), Update(κ°±μ‹ ), Delete(μ‚­μ œ)λ₯Ό λ¬Άμ–΄μ„œ μΌμ»«λŠ” 말이닀 - https://ko.wikipedia.org/wiki/CRUD

ν”νžˆ μš°λ¦¬κ°€ λΈ”λ‘œκ·Έλ‚˜ μΉ΄νŽ˜μ—μ„œ ν•˜λŠ” λ™μž‘λ“€μ΄λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

글을 μ“°κ³ (Create) μ“΄ 글듀을 읽고(Read) μ˜€νƒ€λ₯Ό λ°œκ²¬ν•˜λ©΄ μˆ˜μ •μ„ ν•˜κ³ (Update) μ΄μƒν•œ κ²Œμ‹œκΈ€μ€ μ œκ±°ν•˜κ³ (Delete)... 이런 λ™μž‘λ“€ 말이닀.

맨 μ²˜μŒμ—λ„ λ§ν–ˆμ§€λ§Œ, AxiosλŠ” 라이브러리이기 λ•Œλ¬Έμ— μš°λ¦¬κ°€ μ„œλ²„μ™€ ν•¨κ»˜ 무언가λ₯Ό ν• λ•Œ μ’€ 더 νŽΈλ¦¬ν•˜κ³  직관적인 λ©”μ„œλ“œλ“€μ„ μ œκ³΅ν•œλ‹€. CRUD에 λ§žμΆ°μ„œ μ–΄λ–€ λ©”μ„œλ“œλ“€μ΄ μžˆλŠ”μ§€ ν•œλ²ˆ μ•Œμ•„λ³΄μž.


πŸ’‘ Create - axios.post()

axios.post()λŠ” μΆ”κ°€λ₯Ό ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.
()μ•ˆμ—λŠ” μ„œλ²„μ™€μ˜ 경둜, μΆ”κ°€ν•  λ‚΄μš©μ„ μˆœμ„œλŒ€λ‘œ λ‹΄μ•„μ£Όλ©΄ λœλ‹€.

μ˜ˆμ‹œ μ½”λ“œ

const onSubmitHandler = async () => {
    axios.post('http://localhost:4001/todos', inputValue);
    // setTodos([...todos, inputValue]); // μ‹€μ‹œκ°„ λ°˜μ˜μ„ μœ„ν•΄ μ—…λ°μ΄νŠΈ
    fetchTodos(); // λ‹€μ‹œ DBλ₯Ό μ½μ–΄μ˜€κ²Œλ” ν•˜λŠ”κ²Œ μ’€ 더 μ’‹λ‹€!
  }

πŸ’‘ Read - axios.get()

axios.get()은 쑰회λ₯Ό ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
()μ•ˆμ—λŠ” μ„œλ²„μ™€μ˜ 경둜λ₯Ό λ‹΄μ•„μ£Όλ©΄ λœλ‹€.

ν•˜μ§€λ§Œ μ‘°νšŒλΌλŠ”κ±΄ μ„œλ²„μ— μžˆλŠ” 데이터λ₯Ό κ°€μ Έλ‹€κ°€ λ³΄μ—¬κΈ°μ£ΌλŠ” 것이기 λ•Œλ¬Έμ— axios.get() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μ „, awaitλ₯Ό κΌ­ μ‚¬μš©ν•΄ μ€˜μ•Όν•œλ‹€.

참고둜 awaitλŠ” 화면에 쑰회λ₯Ό ν•˜κΈ° 전에 μš°μ„  μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό λ°›μ„λ•ŒκΉŒμ§€ κΈ°λ‹€λ €! ν•˜λŠ” μš©λ„μ΄λ‹€.

μ˜ˆμ‹œ μ½”λ“œ

const fetchTodos = async () => {
    const {data} = await axios.get('http://localhost:4001/todos'); // λλ‚ λ•Œ κΉŒμ§€ κΈ°λ‹€λ €μ€€λ‹€. (pending이 λœ¨λŠ” 이유)
    setTodos(data);
  }

πŸ’‘ Update - axios.patch()

axios.patch()λŠ” μˆ˜μ •μ„ ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
()μ•ˆμ—λŠ” μ„œλ²„ 경둜, μˆ˜μ •ν•  것을 μˆœμ„œλŒ€λ‘œ λ‹΄μ•„μ£Όλ©΄ λœλ‹€.

μ—¬κΈ°μ„œλŠ” 'μ–΄λ–€ 것'을 κΈ°μ€€μœΌλ‘œ μˆ˜μ •μ„ 할지λ₯Ό μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 보톡 경둜λ₯Ό λ°±ν‹±μœΌλ‘œ λ¬Άμ–΄μ„œ 경둜 끝에 ${}λ₯Ό μ΄μš©ν•΄ 'μ–΄λ–€ 것'을 λ„£λŠ”λ‹€.

그리고 mapν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ ν•΄λ‹Ή κ°’λ§Œ μˆ˜μ •ν•  수 μžˆλ„λ‘ ν•˜λ©΄ λœλ‹€.

μ˜ˆμ‹œ μ½”λ“œ

const onUpdateButtonClickHandler = async () => {
    axios.patch(`http://localhost:4001/todos/${targetId}`, {
      title : contents
    })
    setTodos(
      todos.map((item)=>{
      if (item.id == targetId){
        return {...item, title : contents}
      } else {
        return item;
      }
    }))
  }

πŸ’‘ Delete - axios.delete()

axios.delete()λŠ” μ‚­μ œλ₯Ό ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.
()μ•ˆμ—λŠ” μ„œλ²„ 경둜, μ‚­μ œν•  것을 μˆœμ„œλŒ€λ‘œ λ‹΄μ•„μ£Όλ©΄ λœλ‹€.

delete도 'μ–΄λ–€ 것'을 κΈ°μ€€μœΌλ‘œ μˆ˜μ •μ„ 할지λ₯Ό μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— κ²½λ‘œμ— 백틱을 λ„£κ³  끝에 ${}λ₯Ό μ΄μš©ν•΄ 'μ–΄λ–€ 것'을 λ„£μ–΄ μ€€λ‹€.

그리고 filterν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” λ‚˜λ¨Έμ§€λ§Œ λ³΄μ—¬μ§€κ²Œ ν•˜λ©΄ λœλ‹€.

μ˜ˆμ‹œμ½”λ“œ

const onDeleteClickHandler = async (id) => {
    axios.delete(`http://localhost:4001/todos/${id}`);
    setTodos(todos.filter((item)=> {
      return item.id !== id;
    }))
  }
profile
✨ π‘¬π’—π’†π’“π’šπ’•π’‰π’Šπ’π’ˆ π’„π’π’Žπ’†π’” 𝒕𝒐 π’‰π’Šπ’Ž π’˜π’‰π’ 𝒉𝒖𝒔𝒕𝒍𝒆𝒔 π’˜π’‰π’Šπ’π’† 𝒉𝒆 π’˜π’‚π’Šπ’•π’”. ✨

0개의 λŒ“κΈ€