<li>
๋ฅผ Local Storage์ ์ ์ฅํ๊ธฐ์ง๋ TIL์์ ์ฌ์ฉ์์ ์
๋ ฅ์ด submit๋ ๊ฒฝ์ฐ paintToDo()
๋ฅผ ํตํด ํ๋ฉด์ ์ถ๋ ฅ๋๋๋ก ํ์๋ค. ํ์ง๋ง ์ถ๋ ฅ๋ ๊ณํ๋ค์ ์๋ก๊ณ ์นจ์ ํ๋ ๊ฒฝ์ฐ ๋ค์ ์
๋ ฅํด์ฃผ์ด์ผํ๋ ๋ถํธํจ์ด ์๊ณ , ์ฌ์ฉ์์ ์ด๋ฆ์ ์ ์ฅํ๋ ๊ฒ์ฒ๋ผ Local Storage๋ฅผ ํ์ฉํ์ฌ ์ ์ฅํด๋ณด๋๋ก ํ๊ฒ ๋ค.
์ด์ ๊น์ง์ ์์
์ผ๋ก ์ธํด submit์ ์ถ๋ ฅ์ ์ ์์ ์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์, paintToDo(text)
์์ ๊ธฐ์กด์ ์ฝ๋๋ ๊ทธ๋๋ก ๋ ์ฑ๋ก, LS๋ก์ ์ ์ฅ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์ ๊ฐ์ฅ ๋จผ์ ํ๋ ๊ฒ์ Divide์ด๋ค. const toDos = [];
๋ก ์ ์ธ๋ array์์ ์
๋ ฅ๋ค์ ๋ฃ์ด์ฃผ๊ณ , ์๋ก์ด submit์ด ๋ฐ์ํ ๋๋ง๋ค ํด๋น toDos
๋ฅผ LS์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์งํํ ์์ ์ด๋ค. ๋ํ toDos
๋ฅผ ์ ์ธํจ์ผ๋ก์ ๊ธฐ์กด์ ์ฝ๋์์ ํ์ด์ง๊ฐ ๋ก๋๋จ๊ณผ ๋์์ ์๋ํ๋ function toDos()
๋ฅผ loadedToDos()
๋ก ์์ ํด์ฃผ์๋ค.
์ดํ toDoObj
๋ผ๋ object๋ฅผ text,id๋ฅผ ๊ฐ๊ฒ ํจ์ผ๋ก์ ๋ช๋ฒ์งธ To Do List์ธ์ง(id), ์ด๋ค ๋ด์ฉ์ธ์ง(text)๋ฅผ ์ ์ ์๋๋ก ํ์๋ค. id๋ ๊ธฐ์กด์ ์ ์ธ๋ toDos
์ ๊ธธ์ด๋ฅผ ๋ฐํํ ๊ฐ์ +1์ ํด์ฃผ์๋ค. ์ต์ด ์ ์ธ์ toDos
๋ ๋น์ด์๋ array์ด๊ธฐ ๋๋ฌธ์ length๊ฐ์ด 0์ด๊ณ , ๊ฑฐ๊ธฐ์ 1์ ๋ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฒซ๋ฒ์งธ toDoObj
์ id๋ 1์ด๊ณ , ์ด toDoObj
๊ฐ ์ถ๊ฐ๋๋ฉด ์์ฐ์ค๋ id๊ฐ 2๋ก ๋์ด๊ฐ๋ ๋ฐฉ์์ด๋ค.
์ดํ์๋ ์ด Obj๋ฅผ push()
๋ฅผ ํตํด์ toDos
์ ์ถ๊ฐํด์ฃผ๊ณ , ์ถ๊ฐ๋ ๊ฐ์ LS์ ์ ์ฅํด ์ฃผ์ด์ผํ๋๋ฐ, ํด๋น ๊ธฐ๋ฅ์ ๋ค๋ฅธ ํจ์๋ฅผ ํตํด ์งํํ๋๋ก Divide ํ์๋ค.
์ฌ์ฉ์์ To Do List๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ ์ ์ธ๋ ํจ์ saveToDos()
์ ๋ด๋ถ์๋ Local Storage์์ ์ ์ฅ์ ์๋ฏธํ๋ setItem()
์ ํตํด toDos
๋ฅผ TODOS_LS
์ ์ ์ฅํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์์ฑํ์๋ค.
function saveToDos() {
localStorage.setItem(TODOS_LS, toDos);
}
๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์คํ์์ผ๋ณด์, LS์ ๋ฌด์ธ๊ฐ๊ฐ ์ ์ฅ๋๊ธด ํ์์ง๋ง, toDos์ value๋ก ์ ์ฅ๋ ๊ฐ์ด {"object":object, "object": object}
๋ก์ ์ ์ฅ์ด ๋์๋ค. ์ด๋ฌํ ํ์์ด ๋ฐ์๋ ์์ธ์ Local Storage์๋ javascript์ object๊ฐ ์ ์ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ฉฐ, JSON์ ์ด์ฉํ์ฌ localStorage.setItem(TODOS_LS, JSON.stringify(toDos));
๋ก ์ฝ๋๋ฅผ ์์ ํด์ฃผ์ ๋ด๊ฐ ์ํ๋ ํํ๋ก ์ ์ฅ์ด ๋์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฐฉ๊ธ ์ฌ์ฉํ JSON.stringify()
๋ ๋ญ๊น?
JSON์ด๋, JavaScript Object Notation์ผ๋ก, MDN ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด javascript ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ก์ ๋ค๋ฃฐ ์ ์๋ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ์๊ฒจ๋ ํ์ค ํฌ๋ฉง์
๋๋ค.
saveToDos()
์์ ์ฌ์ฉํ stringify()
๋ object๋ฅผ string์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋์๋ค. ๋น์ฐํ๊ฒ๋, ๋ณํ๋์ด LS์ ์ ์ฅ๋ string์ ์ฝ๋ ๋ด์์ ๋ค์ ํ์ฉํ๊ธฐ ์ํด์๋ parse()
๋ฅผ ํตํด string์ object๋ก์ ๋ฐ๊ฟ์ผํจ์ ์ ์ถํ ์ ์๋ค.
์ง๊ธ๊น์ง์ ์งํ์ ์ ๋ฆฌํ์๋ฉด, submit์ด ๋ฐ์ํ์๋, paintToDo()
์์ ๋จ์ํ ์ถ๋ ฅ์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ Local Storage์๋ ์ ์ฅํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ฃผ์๊ณ , ๊ทธ ๊ธฐ๋ฅ์ saveToDo()
๋ผ๋ ํจ์์ ๋ด๋ถ์์ ์งํ๋๋ฉฐ, object๋ก์ ์ฌ์ฉ๋๋ toDos
๋ฅผ JSON.stringify()
๋ฅผ ํตํด string์ผ๋ก ๋ณํํ์ฌ LS์ ์ ์ฅ์ ํด์ฃผ์๋ค. ์ด์ ํด์ผํ ์ผ์ ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจ์ ํ ์ดํ์๋ ์ถ๋ ฅ๋ ์ํ๋ก ๋ณด์ฌ์ฃผ๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผํ๋๋ฐ, ์ด ๊ธฐ๋ฅ์ init()
์ดํ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ loadToDos()
์ ๊ตฌํํ๋๋ก ํ๊ฒ ๋ค.
๊ฐ์ฅ ๋จผ์ LS์ ์ ์ฅ๋ toDos
๋ฅผ ๋ถ๋ฌ์จ๋ค.
const loadedToDos = localStorage.getItem(TODOS_LS);
๋ง์ฝ loadedToDos
๊ฐ null
์ด๋ผ๋ฉด, ์ถ๋ ฅํด์ผํ ๋ด์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฌด๊ฒ๋ ์คํํ์ง ์๊ณ ์ฌ์ฉ์์ ์
๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๊ณ , null
์ด ์๋ ๊ฒฝ์ฐ์๋ง LS์ ์กด์ฌํ๋ toDos
๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค. ๋ฐ๋ผ์,
if(loadedToDos !== null){
const parsedToDos = JSON.parse(loadedToDos);
parsedToDos.forEach(function(toDo){
paintToDo(toDo.text);
});
}
์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์๋ค. ์์ JSON์์ ์ธ๊ธํ๋ฏ, string ํํ์ ๋ฐ์ดํฐ๋ฅผ object๋ก์ ์ฌ์ฉํ๊ธฐ ์ํด์ JSON.parse()
๋ฅผ ์ฌ์ฉํ๊ณ , ์ด ๊ฐ์ forEach(function)
๋ผ๋ callback ํจ์๋ฅผ ์ฌ์ฉํ์ฌ array๋ด๋ถ์ ๊ฐ ์์์ function์ ์ฌ์ฉํ๋๋ก ํ์๋ค.
callback function forEach()๋ array์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๊ฐ์ข
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ for
๋ฌธ์ ํตํด lengh
๋งํผ ๋ฐ๋ณตํ๋ฉฐ ๊ฐ index
์ ์์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ๊ฐ์ ์๋์ ํ๋ ํจ์์ด๊ณ , ์ธ์๋ก์ function
์ ๋ฐ์ ํด๋น ํจ์๋ฅผ ๊ฐ ์์์ ์๋ํ๋๋ก ํฉ๋๋ค.
๋ฐ๋ผ์ loadToDos()
์์๋ LS์ ์กด์ฌํ๋ toDos
์ value๋ฅผ objectํ ํ์ฌ array๋ก์ ์ ์ฅ๋ parsedToDos
์ ๊ฐ ์์๋ฅผ forEach()
ํจ์๋ฅผ ํตํด ๋ถ๋ฌ์ค๊ณ , ๊ทธ ์์ ํจ์๋ก toDo
๋ฅผ ์ธ์๋ก ํ๊ณ , toDo.text
๋ฅผ paintToDo(toDo.text)
ํ๋๋ก ํ์๋ค.