/car-register

๐Ÿš— ์ฃผ์ฐจ๋“ฑ๋ก์„ ๋”ฐ๋กœ ํ•˜๊ฑฐ๋‚˜ ์ฃผ์ฐจ๋น„๋ฅผ ๋ฏธ๋ฆฌ ์ง€๋ถˆํ•œ ์ฐจ๋“ค์„ ๋ฆฌ์ŠคํŠธํ™” ํ•˜์—ฌ ์ฐจ์ด๋ฆ„,ํšŒ์‚ฌ,๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

Primary LanguageJavaScript

React๋ฅผ ํ™œ์šฉํ•œ CRUD ์ฃผ์ฐจ๋“ฑ๋ก์ฐจ

react + JSON-Server ์ฃผ์ฐจ๋“ฑ๋ก์„ ํ•œ ์ฐจ๋“ค์˜ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธํ™”ํ•˜์—ฌ ํ™•์ธ, ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ป Repo์†Œ๊ฐœ

์ฃผ์ฐจ๋“ฑ๋ก์„ ๋”ฐ๋กœ ํ•˜๊ฑฐ๋‚˜ ์ฃผ์ฐจ๋น„๋ฅผ ๋ฏธ๋ฆฌ ์ง€๋ถˆํ•œ ์ฐจ๋“ค์„ ๋ฆฌ์ŠคํŠธํ™” ํ•˜์—ฌ ์ฐจ์ด๋ฆ„,ํšŒ์‚ฌ,๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๐Ÿ–‹๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ Œ๋”๋ง ์ฒซํ™”๋ฉด ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์ฃผ์ฐจ๋“ฑ๋ก์„ ํ•ด๋†“์€ ์ฐจ๋“ค์˜ ์ •๋ณด๋ฅผ db.json์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ์ €์žฅํ•ด๋†“๊ณ , ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • Add Entered car(+)๋ฒ„ํŠผ์„ ์ด์šฉํ•˜์—ฌ ์ฐจ์ด๋ฆ„, ํšŒ์‚ฌ, ์ฐจ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Actions์˜ ๋ฒ„ํŠผ๋“ค์„ ํ†ตํ•ด ์ˆ˜์ •, ์ œ๊ฑฐ, ์ •๋ณดํ™•์ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Edit๋ฒ„ํŠผ์€ ์ฐจ์˜ ์ •๋ณด๋“ค์„ ์ˆ˜์ •ํ•˜์—ฌ ์ˆ˜์ •ํ•œ ๊ฐ’๋“ค์„ ๋ชฉ๋ก์— ๋‹ค์‹œ ๋“ฑ๋ก์„ ํ•ด์ค๋‹ˆ๋‹ค.
  • Remove๋ฒ„ํŠผ์€ ์ฐจ์˜ ์ •๋ณด๋“ค์„ db.json ์„œ๋ฒ„์˜ ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ œ๊ฑฐ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.
  • Details๋ฒ„ํŠผ์€ ์ฐจ์˜ ์ •๋ณด๋“ค(์ฐจ์ด๋ฆ„, ํšŒ์‚ฌ, ์ฐจ๋ฒˆํ˜ธ)๋ฅผ ๋””ํ…Œ์ผํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค.
  useEffect(() => {
    fetch("http://localhost:8000/cars/")
      .then((res) => {
        return res.json();
      })
      .then((resp) => {
        setCardata(resp);
      })
      .catch((err) => {
        alert("์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค !!");
      });
  }, []);

http://localhost:8000/cars/ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด db.json์— ๋“ฑ๋ก๋œ ์ฐจ๋“ค์˜ ์ •๋ณด๋ฅผ ๋ Œ๋”๋ง์„ ํ†ตํ•ด ๋ณด์—ฌ์ฃผ๊ณ ,
์—๋Ÿฌ๊ฐ€ ์žกํžˆ๋ฉด catch๋ฌธ์„ ํ†ตํ•ด alert๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.

fetch("http://localhost:8000/cars", {
      method: "POST",
      headers: { "content-type": "application/json" },
      body: JSON.stringify(cardata),
    }

Creata ์ฐฝ์„ ํ†ตํ•˜์—ฌ cardata์˜ ๊ฐ’๋“ค์„ JSON.stringify๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

const Removefunction = (id) => {
    if (window.confirm("์ •๋ง ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?")) {
      fetch("http://localhost:8000/cars/" + id, {
        method: "DELETE",
      })
        .then((res) => {
          alert("์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
          window.location.reload();
        })
        .catch((err) => {
          alert("์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค !!");
        });
    }
  };

Remove๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด alert๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์ฐฝ์ด ๋œจ๊ณ  ํ™•์ธ์„ ๋ˆ„๋ฅด๋ฉด http://localhost:8000/cars/ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ์—์„œ ์‚ญ์ œ๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.
์‚ญ์ œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด '์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'๋ผ๋Š” ์•Œ๋ฆผ์ฐฝ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ํ™”๋ฉด์ด ๋‹ค์‹œ ๋ Œ๋”๋ง๋œ๋‹ค.

โŒ ์—๋Ÿฌ๋‚ด์šฉ ๋ฐ ํ•ด๊ฒฐ

  1. ์—๋Ÿฌ๋‚ด์šฉ: CarDetail.js์ž‘์„ฑ ์ค‘์— No routes matched location์˜ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ์ฝ˜์†”์ฐฝ์— ๋œธ.
    ์ด ์—๋Ÿฌ๋Š” react๊ฐ€ ๋ Œ๋”๋˜๋ฉด์„œ app.js์—์„œ CarDetail๊ฐ€ ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง ๋˜์ง€์•Š๊ณ  ๋๋‚ด์ ธ์„œ ๋งจ ์ฒ˜์Œ ๋ Œ๋” ์‹œ ์ด๋Ÿฌํ•œ ์—๋Ÿฌ ๋ฌธ๊ตฌ๊ฐ€ ๋œฌ ๊ฒƒ์ด์˜€๋‹ค.

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 4 06 02
    ํ•ด๊ฒฐ๋ฐฉ๋ฒ•: app.js์—์„œ CarDetail์˜ Route path๋ฅผ ์ œ๋Œ€๋กœ ํ™•์ธํ•˜๊ณ  /๊ฐ€ ๋น ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ path๊ฒฝ๋กœ์— /๊ฐ€ ๋น ์ ธ์žˆ๋Š” ๊ฒƒ์„๋ณด๊ณ  ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

  2. ์—๋Ÿฌ๋‚ด์šฉ: 404 Not Found์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ฐพ์•„๋ณด๋‹ˆ ์„œ๋ฒ„๋ฅผ ์ฐพ๊ธด ํ–ˆ์œผ๋‚˜ URL์— ํ•ด๋‹น๋˜๋Š” ํŽ˜์ด์ง€(ํŒŒ์ผ)์„ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋–„ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•˜์˜€๋‹ค.
    ํ•ด๊ฒฐ๋ฐฉ๋ฒ•: Vscode๋ฅผ ์žฌ์‹คํ–‰ํ•˜๊ณ  npm start, db๊ฒฝ๋กœ ์„ค์ •๊นŒ์ง€๋งŒ ์™„๋ฃŒํ•˜๊ณ  ์‹œ์ž‘ํ•˜์—ฌ react-router-dom์„ ์„ค์น˜ํ•˜์ง€ ๋ชปํ•ด์„œ ์ƒ๊ธด ์—๋Ÿฌ์˜€๋‹ค.
npm i react-router-dom

์„ ์‹คํ–‰์‹œ์ผœ ๋ผ์šฐํ„ฐ๊นŒ์ง€ ์„ค์น˜์™„๋ฃŒํ•˜๊ณ  ์‹คํ–‰ํ•˜์˜€๋”๋‹ˆ ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

โš™๏ธ Prerequisites

  • node >= 18.14.0
  • react >= 18.2.0
  • bootstrap >= 5.2.3
  • json-server >= 0.17.1
  • react-router-dom >= 6.8.0

    Install

    npx create-react-app .
    npm install react-router-dom --save
    npm install react-bootstrap bootstrap
    npm install json-server
    json-server --watch db.json --port 8000

    ๐Ÿ–ฅ๏ธ ์‹คํ–‰ํ™”๋ฉด

    ์ฒซ ๋ Œ๋”ํ™”๋ฉด

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 4 20 45

    Create ํ™”๋ฉด

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 4 20 57

    Edit ํ™”๋ฉด

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 4 24 07

    Remove ํ™”๋ฉด

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 4 21 17

    Detail ํ™”๋ฉด

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-06 แ„‹แ…ฉแ„’แ…ฎ 4 21 27