์žฌ๋ฐŒ๊ฒŒ ํ•ฉ์‹œ๋‹ค

๊ธฐ๋กํ•˜๊ธฐ, ๊ฐ€์‹œํ™”ํ•˜๊ธฐ

Vanilla JS

๋‚ด ์ฝ”๋“œ๊ฐ€ ์šฐ์•„ํ•˜์ง€ ์•Š์€ ์ด์œ 

์€๋˜๋”” 2022. 8. 17. 13:43

๋ฌธ๋ฒ…์Šค ๊ฐ•์˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง์ ‘ ๊ตฌํ˜„ ํ•ด๋ณด๋ฉฐ ๋Š๋‚€ ๋‚ด ์ฝ”๋“œ์˜ ์ „๋ฐ˜์ ์ธ ๋ฌธ์ œ์ 

์š”๊ตฌ ์‚ฌํ•ญ

// TODO: localStorage์— ์ €์žฅ 
// - [] localStroage์— ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. 
// - [] ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด localStorage์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

// TODO: ํ’ˆ์ ˆ ํ‘œ์‹œ ๊ธฐ๋Šฅ 
// - [] ๋ฉ”๋‰ด์˜ ํ’ˆ์ ˆ ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ , ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ’ˆ์ ˆ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.(toggle)

๋‚ด ์ฝ”๋“œ

const toggleSoldOutMenu = (e) => {
    const $menuElement = e.target.closest("li");
    const menuId = parseInt($menuElement.dataset.menuId, 10);
    const $menuNameElement = $menuElement.querySelector(".menu-name");
    $menuNameElement.classList.toggle("sold-out");
    this.menu[this.currentCategory] = this.menu[this.currentCategory].map(
      (item, index) => {
        return index === menuId ? { ...item, soldOut: !item.soldOut } : item;
      }
    );
    store.setLocalStorage(this.menu);
  };

const addMenuName = () => {
    if ($("#menu-name").value.replace(/ /gi, "") === "") {
      alert("๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”");
      return;
    }
    const menuName = $("#menu-name").value;
    this.menu[this.currentCategory].push({ name: menuName, soldOut: false });
    store.setLocalStorage(this.menu);
    render();
    $("#menu-name").value = "";
  };

๋™์ž‘์€ ๋‹ค ์ž˜๋๋‹ค.

๋‚ด ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ 

๊ตฌ์ฒด์ ์œผ๋กœ ์„ธ ๊ฐ€์ง€์˜ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค.

 

์ฒซ์งธ, undefined== false์ž„์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

 

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ํ’ˆ์ ˆ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ์• ์ดˆ์— ๋ฉ”๋‰ด๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฉ”๋‰ด ์•„์ดํ…œ ๊ฐ์ฒด์— soldOut ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด addMenuName ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ •์˜๋˜์ง€ ์•Š์€ ํ”„๋กœํผํ‹ฐ๋Š” false๋กœ ์—ฌ๊ฒจ์ง€๋ฏ€๋กœ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ช…์‹œํ•  ํ•„์š” ์—†์ด ํ’ˆ์ ˆ ์‹œ์— ํ•ด๋‹น ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋๋‹ค.

 

๋‘˜์งธ, render() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋กœ์ง์ด ํ˜ผ์šฉ๋˜์–ด ์žˆ๋‹ค.

render: this.menu๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜. ์ƒํƒœ์ธ this.menu๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๋‚œ ํ›„ render๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๊ฐ€ ํ™”๋ฉด์— ๋ฐ˜์˜๋œ๋‹ค.

ํ’ˆ์ ˆ ๋ฒ„ํŠผ์ด ํด๋ฆญ๋˜๋ฉด ์ด๋ฅผ ๋‘ ๊ตฐ๋ฐ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค.

  • localStorage → ์ƒˆ๋กœ๊ณ ์นจ ์‹œ์—๋„ ํ’ˆ์ ˆ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ
  • ํ™”๋ฉด: span ํƒœ๊ทธ์— sold-out ํด๋ž˜์Šค ์ถ”๊ฐ€/์‚ญ์ œ ํ•˜๊ธฐ

๋‚˜๋Š” ์ด ๋‘˜์„ ๋”ฐ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋‚ด this.menu ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•ด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ, span ํƒœ๊ทธ์— ํด๋ž˜์Šค ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด spanํƒœ๊ทธ์— ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋Š” ์ž‘์—…์ด ๋‘ ๋ฒˆ์”ฉ ์ด๋ค„์ง„๋‹ค.
toggleSoldOutMenu ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ง์ ‘ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ ํ•œ ๋‹ค์Œ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋กœ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ํŽธ์ด ๋” ๋ฐ”๋žŒ์งํ•˜๋‹ค. ์–ด์ฐจํ”ผ ํ’ˆ์ ˆ ์—ฌ๋ถ€๋Š” ์ƒํƒœ๋กœ ๊ด€๋ฆฌ ๋˜๋‹ˆ๊นŒ.

 

์…‹์งธ, menuId๋ฅผ ๊ตฌํ–ˆ์œผ๋ฏ€๋กœ ์›ํ•˜๋Š” ์›์†Œ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.


map ํ•จ์ˆ˜๋กœ this.menu ๋ฐฐ์—ด์„ ์ˆœํšŒํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค.

์šฐ์•„ํ•œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด

๋‚ด ์ฝ”๋“œ๋Š” ๋ถ€์‚ฐ์Šค๋Ÿฝ๋‹ค. ์šฐ์•„ํ•˜์ง€ ๋ชปํ•˜๋‹ค. ๋งˆ์Œ์ด ๊ธ‰ํ•ด ์ด๋Ÿฐ ์ €๋Ÿฐ ์ฝ”๋“œ๋ฅผ ๊ฐ–๋‹ค ๋ถ™์ธ ๋ชจ์–‘์ƒˆ๋‹ค.
์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋กœ ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์นจ์ฐฉํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋‚ด๋Š” ๋ชจ์Šต์ด ์šฐ์•„ํ•˜๋‹ค.

 

๐ŸŽˆ ๋ฐœ์ „ํ•˜๊ธฐ ์œ„ํ•ด ํ›ˆ๋ จํ•ด์•ผ ํ•  ๊ฒƒ๋“ค

  • ์ด๋ฏธ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ์—ฐ์Šต
  • ์š”๊ตฌ๋ถ„์„์€ ์ตœ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์œผ๋กœ ์ชผ๊ฐœ๊ธฐ, ์š”๊ตฌ๋ถ„์„ ํ›„ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋Š” ์—ฐ์Šต
  • ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€๋งŒ ์ƒ๊ฐํ•˜๊ธฐ
  • ์–‘์ด ์•„๋‹Œ ์งˆ์— ์ดˆ์  ๋งž์ถ”๊ธฐ