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

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

Vanilla JS 8

Vanilla Javascript๋กœ SPA ๊ตฌํ˜„ํ•˜๊ธฐ(ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‡ผํ•‘๋ชฐ SPA)

โœ… SPA(Single Page Application) ์ดํ•ดํ•˜๊ธฐ ํŽ˜์ด์ง€ ์ด๋™์˜ ๊ณผ์ •์„ ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด url์„ ์š”์ฒญํ•œ๋‹ค. (์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜, ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ๋“ฑ) ์š”์ฒญํ•œ url์— ๋งž๋Š” ๋ฆฌ์†Œ์Šค(html, css, js)๋ฅผ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•œ๋‹ค. ๊ฐ„๋‹จํ•˜์ฃ ? MPA(Multiple Page Application), SPA(Single Page Application) ๋ชจ๋‘ ํŽ˜์ด์ง€ ์ด๋™์˜ ๊ณจ์ž๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ MPA์™€ SPA๋กœ ๊ตฌ๋ถ„์ด ๋ฉ๋‹ˆ๋‹ค. MPA์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ๋ฐฉ์‹ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด url์„ ์š”์ฒญ ํ•ด๋‹น url์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์‘๋‹ต์œผ๋กœ ํ™”๋ฉด์„ ๋ Œ๋”๋ง ์ฆ‰, ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์„œ..

Vanilla JS 2022.11.11

Vanilla Javascript๋กœ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ

๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์‡ผํ•‘๋ชฐ SPA๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ–ˆ๋‹ค. ํ™ฉ์ค€์ผ๋‹˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด ์ดˆ์•ˆ์„ ์งœ๊ณ , ์ˆ˜์ •์„ ๊ฑฐ์ณค๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ constructor: ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ฆ‰ ์ดˆ๊ธฐ state/props๋ฅผ ์„ค์ •ํ•˜๊ณ , template ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฌผ์ธ ๋งˆํฌ์—…์„ ๋ Œ๋”๋งํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค. setup: ์ดˆ๊ธฐ state๋ฅผ ์„ค์ •ํ•œ๋‹ค. mounted: ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. template: ์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ๋ฐ˜์˜ํ•œ ๋งˆํฌ์—…์„ ๋ฆฌํ„ดํ•œ๋‹ค. render: $target๋‚ด์— ๋งˆํฌ์—…์„ ๋ Œ๋”๋งํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ mounted ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. setState: ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. mounted ๋ฉ”์„œ๋“œ๋ฅผ ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž. ์˜ˆ์‹œ๋กœ ํ™ฉ..

“DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•œ๋‹ค” ์˜ ์˜๋ฏธ์™€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ณธ์งˆ

Vanilla Javascript๋กœ ์›น ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ | ๊ฐœ๋ฐœ์ž ํ™ฉ์ค€์ผ ์œ„ ๊ธ€์„ ์ฝ๋‹ค๊ฐ€ ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค. ์ด์ œ๋Š” ์ง์ ‘์ ์œผ๋กœ DOM์„ ๋‹ค๋ฃจ๋Š” ํ–‰์œ„๊ฐ€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๊ฐ์†Œํ–ˆ๊ณ , ์ƒํƒœ(State) ๋ฅผ ๊ธฐ์ค€์œผ๋กœ DOM์„ ๋ Œ๋”๋ง ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐœ์ „ํ•œ ๊ฒƒ์ด๋‹ค. DOM์ด ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ State์— ์ข…์† ๋˜์–ด๋ฒ„๋ฆฐ ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด, State๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ DOM์ด ๋ณ€ํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ธ€์€ DOM ์š”์†Œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๊ณผ state์— ๋”ฐ๋ผ DOM์„ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์„ ์„œ๋กœ ๋Œ€์ฒ™์ ์— ์žˆ๋Š” ๋ฐ˜๋Œ€ ๊ฐœ๋…์œผ๋กœ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ๋‚œ ์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์–ด์งธ์„œ ๋ฐ˜๋Œ€ ๊ฐœ๋…์ด ๋˜๋Š” ๊ฒƒ์ธ์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค. state์— ๋”ฐ๋ผ DOM์„ ๋ Œ๋”๋งํ•˜๋Š” ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋„, innerHTML API๋ฅผ ์‚ฌ์šฉํ•ด DOM์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋‚˜..

Vanilla JS 2022.10.08

๋ฆฌํŒฉํ† ๋ง | ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์ถ”์ƒํ™”ํ•˜๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ธ”๋กœ๊ทธ์— ์žˆ๋Š” ํ•ด์„ค ๊ธ€์„ ์ฐธ๊ณ ํ•ด ๋ฆฌํŒฉํ† ๋งํ•œ ๋‚ด์šฉ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฐ”๋€Œ์–ด์•ผ ํ•˜๋Š” ์˜์—ญ์ด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋‹ค. Nodes์™€ Breadcrumb! ๋ฆฌํŒฉํ† ๋ง ์ „ App ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ renderNodesSection ์™€ renderBreadcrumbSection ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ, ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งˆํฌ์—…์„ ๋ Œ๋”๋งํ•œ๋‹ค. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋“ค์„ ํ˜ธ์ถœํ•ด ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋กœ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•œ๋‹ค. ๊ตฌํ˜„ ์กฐ๊ฑด ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ธ”๋กœ๊ทธ์—์„œ ์ œ์‹œํ•œ ๋ฐ”๋žŒ์งํ•œ ๋ฐฉํ–ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์ถ”์ƒํ™” DOM ์ ‘๊ทผ์„ ์ตœ์†Œํ™” ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋ณด๋‹ค๋Š” ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์ถ”์ƒํ™”ํ•˜๊ธฐ '์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์ถ”์ƒํ™” ํ•˜๋ผ'๋Š” ๊ฒŒ ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ์ž˜ ์™€๋‹ฟ์ง€ ์•Š์•˜๋‹ค. ๊ฒ€์ƒ‰ํ•ด ๋ณธ ๊ฒฐ๊ณผ ์ถ”์ƒํ™”๋ž€ ๋ณต์žกํ•œ ์ž๋ฃŒ, ..

๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด์ 

๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ (.) ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๋Œ€๊ด„ํ˜ธ([]) ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๋‘ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์„ ๊ฐ€์ง„๋‹ค. ์  ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ์—๋Š” ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์ธ ๋‹จ์ˆœ ์‹๋ณ„์ž๊ฐ€ ์™€์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด ๋Œ€๊ด„ํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฌธ์ž์—ด๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์ด ์™€์•ผ ํ•œ๋‹ค. let author = book.author; // ์  ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ let title = book["main title"]; // ๋Œ€๊ด„ํ˜ธ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๋‘ ๋ฐฉ๋ฒ•์˜ ์šฉ๋ก€ ์ƒ์˜ ์ฐจ์ด๋Š” ์ ‘๊ทผํ•˜๋ ค๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€ ์— ์žˆ๋‹ค. ์‹๋ณ„์ž์˜ ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ๊ทธ๋žจ์—์„œ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ˜๋ฉด ๋ฌธ์ž์—ด์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๊ธฐ์— ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์กฐ์ž‘ํ•  ..

Vanilla JS 2022.09.11

this ํ‚ค์›Œ๋“œ

function App() { this.contents = []; } App(); App ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  this.contents๋กœ contents๋ผ๋Š” ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ํ•˜๊ณ ์ž ํ–ˆ๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. thisํ‚ค์›Œ๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์˜€๋‹ค. this ํ‚ค์›Œ๋“œ์˜ ์˜๋ฏธ this๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์‹ ์ด ์†ํ•ด ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•œ๋‹ค. const person = { sayHi() { console.log(this); // person ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. } } ๋”ฐ๋ผ์„œ ์ „์—ญํ•จ์ˆ˜์—์„œ์˜ this๋Š” window ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ „์—ญ scope์—์„œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด window ๊ฐ์ฒด์— ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋งŒ strict mode์ผ ๋•Œ ์ „์—ญํ•จ์ˆ˜์—์„œ this๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด undefined๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ์œ„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ..

Vanilla JS 2022.08.19

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

๋ฌธ๋ฒ…์Šค ๊ฐ•์˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง์ ‘ ๊ตฌํ˜„ ํ•ด๋ณด๋ฉฐ ๋Š๋‚€ ๋‚ด ์ฝ”๋“œ์˜ ์ „๋ฐ˜์ ์ธ ๋ฌธ์ œ์  ์š”๊ตฌ ์‚ฌํ•ญ // TODO: localStorage์— ์ €์žฅ // - [] localStroage์— ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. // - [] ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด localStorage์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. // TODO: ํ’ˆ์ ˆ ํ‘œ์‹œ ๊ธฐ๋Šฅ // - [] ๋ฉ”๋‰ด์˜ ํ’ˆ์ ˆ ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ , ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ’ˆ์ ˆ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.(toggle) ๋‚ด ์ฝ”๋“œ const toggleSoldOutMenu = (e) => { const $menuElement = e.target.closest("li"); const menuId = parseInt($menuElement.dataset.menuId, 10); const $menuNam..

Vanilla JS 2022.08.17

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€

ํ•จ์ˆ˜์˜ ์šฉ๋„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค. FE ๊ฐœ๋ฐœ์— ์žˆ์–ด ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์—๋Š” ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ UI ์š”์†Œ ์ด ์ค‘ ์˜ค๋Š˜์€ ๋‘๋ฒˆ์งธ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ ํŒจํ„ด์˜ ๊ฒฝ์šฐ ์˜์‹ํ•˜์ง€ ์•Š์•„๋„ ๊ณง์ž˜ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘๋ฒˆ์งธ ํŒจํ„ด์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ๊ฐœ๋…๊ณผ ๋‹ค์†Œ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ๊ณ ๋ฐฉ์‹์„ ์˜์‹์ ์œผ๋กœ ํ™•์žฅํ•˜์ง€ ์•Š์œผ๋ฉด ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์ด ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ํŠน์ • UI ์š”์†Œ๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  UI๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋ถ€๋ถ„์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” UI๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒƒ์ด๋‹ค. โ—๏ธ์œ ์‚ฌํ•œ ์ฝ”..

Vanilla JS 2022.08.17