๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/[๋…ธ๋งˆ๋“œ ์ฝ”๋”]๋ฐ”๋‹๋ผ JS๋กœ ํฌ๋กฌ ์•ฑ ๋งŒ๋“ค๊ธฐ

[๋…ธ๋งˆ๋“œ ์ฝ”๋”]๋ฐ”๋‹๋ผ JS๋กœ ํฌ๋กฌ ์•ฑ ๋งŒ๋“ค๊ธฐ - #7 TO DO LIST

by eugene663 2021. 8. 11.

#7.0 ~ 7.1 Setup, Adding ToDos

greetings์—์„œ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. input์— ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ™”๋ฉด์— ๋ณด์ด์ง€๋งŒ, ์ƒˆ๋กœ๊ณ ์นจ ํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. 

 

#7.2 Deleting To Dos

์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์œ„์˜ ๋‚ด์šฉ๊ณผ ๊ฐ™๋‹ค. createElement๋ฅผ ํ†ตํ•ด ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  EventListener๋ฅผ ํ†ตํ•ด ํด๋ฆญ์„ ๊ฐ์ง€ํ•˜๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Œ€๋กœ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ์–ด๋–ค ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์˜€๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ 

deleteToDo ํ•จ์ˆ˜์˜ console.log(event); ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋ฉด target > parentElement ๋˜๋Š” parentNode > innerText์—์„œ

ํด๋ฆญํ•œ ๋ฆฌ์ŠคํŠธ์˜ ๋‚ด์šฉ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ๋ฆฌ์ŠคํŠธ๋งŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

#7.3 Saving To Dos

์ƒˆ๋กœ๊ณ ์นจํ•ด๋„ ์ •๋ณด๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ ค๋ฉด localStorage๋ฅผ ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค. localStorage์— ์ €์žฅํ•˜๊ณ  ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด localStorage๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ localStorage์—๋Š” ๋ฐฐ์—ด์„ ์ €์žฅํ•  ์ˆ˜ ์—†๊ณ  ํ…์ŠคํŠธ๋งŒ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ, saveToDo ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๊ฐœ๋ณ„๋กœ ์ €์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Œ€๋กœ ํ•˜๋ฉด ์ƒˆ๋กœ๊ณ ์นจํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์ด์ „์˜ ๋‚ด์šฉ์ด ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ˆœ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ["a","b","c"]์™€ ๊ฐ™์€ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด JSON.stringify()๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค. 

๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๋ฉด ์ค‘๋ณต๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ๊ณ ์นจ ๋ฌธ์ œ๋Š” ์•„์ง๊นŒ์ง€๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

#7.4 ~ 7.5 Loading To Dos

 

stringify๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ๋ฐฐ์—ด ๋ชจ์–‘์˜ string์„ parse๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JS๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

๋”ฐ๋ผ์„œ ์ด์ฒ˜๋Ÿผ ์ ์šฉํ•˜๋ฉด ์‚ด์•„์žˆ๋Š” ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

 

 

 

JS๋Š” ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ๊ฐ์˜ item์— ๋Œ€ํ•ด function์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. ์ด๋Š” ๋ฐฐ์—ด์ด ๊ฐ€์ง„ forEach๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๋‹ค.

parsedToDos.forEach(sayHello);

parsedToDos.forEach((item) => console.log("this is the turn of ", item)); 

๋‘˜ ๋‹ค ๊ฐ™์€ ํ‘œํ˜„์ด๋‹ค. ๋‘๋ฒˆ์งธ ํ‘œํ˜„์€ ๋”ฐ๋กœ ์ด๋ฆ„, ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋” ์งง๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, JS๋Š” function์„ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ๊ฐ์˜ item์„ ์ค€๋‹ค.

์ด๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋ฉด, ๋งค item๋งˆ๋‹ค paintToDo๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ์—๋„ ๋‚ด์šฉ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

-> parsedToDos.forEach(paintToDo);

 

ํ•˜์ง€๋งŒ ๋‹ค์‹œ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ด์ „์˜ ๋‚ด์šฉ์€ ๋˜ ์‚ฌ๋ผ์ง„๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ฒ˜์Œ ๋ฐฐ์—ด ์„ ์–ธ์„ const toDos = [];๋กœ ํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด๋กœ ์‹œ์ž‘๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

let toDos =[];๋กœ ์ˆ˜์ •ํ•˜๊ณ  parseํ•œ ์ดํ›„์— toDos = parsedToDos;ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

 

#7.6 Deleting To Dos

์•„์ง ์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค. 

์ค‘๋ณต๋œ item์„ ์‚ญ์ œํ•˜๋ ค๋ฉด ์ •ํ™•ํžˆ ์–ด๋–ค item์ธ์ง€ ๊ตฌ๋ณ„์ด ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๋žœ๋คํ•œ ์•„์ด๋””๋„ ํ•จ๊ป˜ ๊ฐ€์ง€๊ณ ์žˆ๋Š” object๋กœ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

paintToDoํ•จ์ˆ˜์—๋„ ์ด ์†์„ฑ์„ ๋ฐ˜์˜ํ•ด์ค˜์•ผ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ง€์šฐ๊ธฐ ์œ„ํ•ด filter()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

filter์˜ ํ•จ์ˆ˜์— ๋Œ€ํ•ด false๊ฐ’์„ ๊ฐ€์ง€๋ฉด ์‚ญ์ œ๋œ๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ, item !== 3 ์ด false๊ฐ€ ๋˜๋Š” 3์ด ์‚ญ์ œ๋œ๋‹ค. ์ด๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ํด๋ฆญํ•œ ๋ฒ„ํŠผ id์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์•Œ๋งž์€ li ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

li.id๊ฐ€ string์ด๋ฏ€๋กœ parseIntํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ •์ˆ˜๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค€๋‹ค. filter๋ฅผ ํ†ตํ•ด ์‚ญ์ œํ•œ ์ดํ›„ saveToDos() ํ•ด์•ผํ•œ๋‹ค!!