๋ฌธ๋ฒ ์ค ๊ฐ์์ ์๊ตฌ์ฌํญ์ ์ง์ ๊ตฌํ ํด๋ณด๋ฉฐ ๋๋ ๋ด ์ฝ๋์ ์ ๋ฐ์ ์ธ ๋ฌธ์ ์
์๊ตฌ ์ฌํญ
// 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 ๋ฐฐ์ด์ ์ํํ ์ด์ ๊ฐ ์๋ค.
์ฐ์ํ ์ฝ๋๋ฅผ ์ํด
๋ด ์ฝ๋๋ ๋ถ์ฐ์ค๋ฝ๋ค. ์ฐ์ํ์ง ๋ชปํ๋ค. ๋ง์์ด ๊ธํด ์ด๋ฐ ์ ๋ฐ ์ฝ๋๋ฅผ ๊ฐ๋ค ๋ถ์ธ ๋ชจ์์๋ค.
์ต์ํ์ ์ฝ๋๋ก ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ์นจ์ฐฉํ๊ฒ ๊ตฌํํด๋ด๋ ๋ชจ์ต์ด ์ฐ์ํ๋ค.
๐ ๋ฐ์ ํ๊ธฐ ์ํด ํ๋ จํด์ผ ํ ๊ฒ๋ค
- ์ด๋ฏธ ์๋ ํจ์๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๋ ์ฐ์ต
- ์๊ตฌ๋ถ์์ ์ต๋ํ ๊ตฌ์ฒด์ ์ผ๋ก ์ชผ๊ฐ๊ธฐ, ์๊ตฌ๋ถ์ ํ ๊ฐ๋ฐ์ ์์ํ๋ ์ฐ์ต
- ํ ๋ฒ์ ํ ๊ฐ์ง๋ง ์๊ฐํ๊ธฐ
- ์์ด ์๋ ์ง์ ์ด์ ๋ง์ถ๊ธฐ
'Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vanilla Javascript๋ก SPA ๊ตฌํํ๊ธฐ(ํ๋ก๊ทธ๋๋จธ์ค ์ผํ๋ชฐ SPA) (0) | 2022.11.11 |
---|---|
โDOM์ ์ง์ ์กฐ์ํ๋คโ ์ ์๋ฏธ์ ์ปดํฌ๋ํธ์ ๋ณธ์ง (0) | 2022.10.08 |
๊ฐ์ฒด ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐจ์ด์ (0) | 2022.09.11 |
this ํค์๋ (0) | 2022.08.19 |
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํจ์๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง (0) | 2022.08.17 |