๐Ÿ“–[React] PUT(์ˆ˜์ •), DELETE(์‚ญ์ œ)

ํ˜ฑยท2022๋…„ 10์›” 16์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
25/28

Update - PUT Method ์‚ฌ์šฉ

์ž…๋ ฅํ•˜๋ฉด, ์œ ์ง€๋˜๋„๋ก ํ•˜๋Š” ์˜ˆ์ œ

Words.js

 function toggleDone() {
    //  setIsDone(!isDone);
    fetch(`http://localhost:3001/words/${word.id}`, {
      method: "PUT",
      headers: {
        "Content-Type": "application/json", //๋ณด๋‚ด๋Š” resource์˜ type(๋ฌธ์ž์—ด, html, image๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€)
      },
      //์‹ค์–ด์„œ ๋ณด๋‚ด๋Š” ์ •๋ณด๋“ค์„ ์ž…๋ ฅ
      body: JSON.stringify({
        ...word,
        isDone: !isDone,
      }),
    }).then((res) => {
      if (res.ok) {
        setIsDone(!isDone);
      }
    });
  }

PUT ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

  1. fetch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ url ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  2. ์‚ฌ์šฉํ•˜๋Š” method : 'PUT'
  3. header์— ๋ณด๋‚ด๋Š” resource์˜ type ์ž…๋ ฅ ("Content-Type": "application/json")
  4. body์— ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”์‹œํ‚ฌ ๊ฒƒ์ธ์ง€ ์จ์คŒ
    ์ด๋•Œ JSONํŒŒ์ผ์„ stringํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟˆ JSON.stringify์ด์šฉ
    ...word๋Š” ๊ธฐ์กด์— ์žˆ๋Š” word db)
  5. ๋ชจ๋‘๋‹ค ๋ถˆ๋Ÿฌ์™”์œผ๋ฉด (then) response๊ฐ€ ๋งŒ์•ฝ ok(res.ok)์ด๋ฉด setIsDone์„ ๋ฐ”๊พธ์–ด์คŒ(๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ์–ด์คŒ)

DELETE - DELETE Method ์‚ฌ์šฉ

Words.js

function del() {
    if (window.confirm("์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?")) {
      fetch(`http://localhost:3001/words/${word.id}`, {
        method: "DELETE",
      });
    }
  }

DELETE ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

  1. fetch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ url ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  2. ์‚ฌ์šฉํ•˜๋Š” method : 'DELETE'
  3. ์ด๋•Œ, ํ™•์‹คํžˆ ์‚ญ์ œํ•  ๊ฒƒ์ธ์ง€ ํ™•์ธ window.confirm('ํ™•์ธ๋ฌธ๊ตฌ')
  4. ๋งž๋‹ค๋ฉด DELETE๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ
  5. DELETE๋Š” ์ „ํ•ด์ค„ data๊ฐ€ ์—†์œผ๋ฏ€๋กœ header๋‚˜ body๊ฐ€ ํ•„์š” ์—†์Œ

    ์‚ญ์ œ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ๊ฒฝ๊ณ ๋ฌธ์ด ๋œจ๊ณ  ํ™•์ธ์„ ๋ˆ„๋ฅด๊ณ  ์ƒˆ๋กœ ๊ณ ์นจ์„ ํ•˜๋ฉด ์‚ญ์ œ๋จ.
    ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์‚ญ์ œ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์‹ค์ œ ๋‹จ์–ด๋Š” ์ง€์›Œ์ง ํ•˜์ง€๋งŒ,
    ํŽ˜์ด์ง€์—๋Š” ์–ด๋–ค ๋ณ€ํ™”๋„ ์—†์Œ -> ์‚ญ์ œ๋œ ์ดํ›„ ๋‹จ์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์ฃผ์ง€ ์•Š์Œ
    ์ฆ‰, ๋‹จ์–ด ๋ฆฌ์ŠคํŠธ์—๋Š” ๋‚จ์•„ ์žˆ์Œ(์ฝ˜์†”์ฐฝ ํ™•์ธ)
    ์ด๋•Œ null์„ returnํ•ด์ฃผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ‘œํ˜„๋˜์ง€ ์•Š์Œ => ๋‹จ์–ด ๋ฆฌ์ŠคํŠธ์—์„œ ์ง€์›Œ์ง

๋‹จ์–ด ๋ฆฌ์ŠคํŠธ์—์„œ ์ง€์šฐ๊ธฐ(db)

Words.js

export default function Word({ word: w }) {
  const [word, setWord] = useState(w);
function del() {
    if (window.confirm("์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?")) {
      fetch(`http://localhost:3001/words/${word.id}`, {
        method: "DELETE",
      }).then((res) => {
        if (res.ok) {
          setWord({ id: 0 });
        }
      });
    }
  }
if (word.id === 0) {
    return null;
  }
  1. function Word({word : w }) { const [word, setWord] = useState(w);
    ๋ฐ›์•„์˜จ props๋ฅผ w๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋กœ ๋ฐ›์Œ
  2. DELETE ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด, word์˜ id๋ฅผ 0์œผ๋กœ ์„ค์ •
  3. if (word.id === 0) { return null; }๋กœ word์˜ id๊ฐ€ 0์ด ๋˜๋ฉด null ๋ฐ˜ํ™˜
  4. ๋”ฐ๋ผ์„œ... db์—์„œ ์‚ญ์ œํ•œ word๋Š” ์‚ฌ๋ผ์ง!!
profile
new blog: https://hae0-02ni.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€