[TIL] 211107

Lee SyongΒ·2021λ…„ 11μ›” 7일
0

TIL

λͺ©λ‘ 보기
81/204
post-thumbnail

πŸ“ 였늘 ν•œ 것

  1. to do list μΆ”κ°€ν•˜κΈ° - μ‚­μ œ λ²„νŠΌ λ§Œλ“€κΈ° / 둜컬 μŠ€ν† λ¦¬μ§€μ— to do list μ €μž₯ ν›„ 뢈러였기

πŸ“š 배운 것

1. To Do List

1) to do list μΆ”κ°€ν•˜κΈ°

πŸ”Ž λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œ

const toDoForm = document.querySelector('#todo-form');
const toDoInput = document.querySelector('#todo-form input');
const toDoList = document.querySelector('#todo-list');

function ontoDoSubmit(event) {
  event.preventDefault();
  const toDo_li = document.createElement('li');
  toDo_li.innerText = toDoInput.value;
  toDoList.appendChild(toDo_li);
  toDoInput.value = null;
}

toDoForm.addEventListener('submit', ontoDoSubmit);

πŸ”Ž κ°•μ˜ μ½”λ“œ

  • todoInput을 toDoForm μ•ˆμ—μ„œ μ°Ύμ•˜λ‹€

  • 이벀트 ν•Έλ“€λŸ¬ ν•¨μˆ˜μ—μ„œ todoλ₯Ό 화면에 ν‘œμ‹œν•˜λŠ” μ½”λ“œλ₯Ό λ”°λ‘œ λΉΌλ‚΄ paintToDo() ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλ‹€

  • li μ•ˆμ— νœ΄μ§€ν†΅λ„ λ§Œλ“€κΈ° μœ„ν•΄ todo ν…μŠ€νŠΈλ₯Ό λ°”λ‘œ 넣지 μ•Šκ³  span에 λ„£μ—ˆλ‹€

const toDoForm = document.querySelector('#todo-form');
const toDoInput = toDoForm.querySelector('input');
const toDoList = document.querySelector('#todo-list');

function paintToDo(toDo) {
  const li = document.createElement('li');
  const span = document.createElement('span');
  li.appendChild(span);
  span.innerText = toDo;
  toDoList.appendChild(li);
}

function onToDoSubmit(event) {
  event.preventDefault();
  const newToDo = toDoInput.value;
  toDoInput.value = '';
  paintToDo(newToDo);
}

toDoForm.addEventListener('submit', onToDoSubmit);

2) μ‚­μ œ λ²„νŠΌ λ§Œλ“€κΈ°, to do list μ €μž₯ν•˜κΈ°

(1) μ‚­μ œ λ²„νŠΌ λ§Œλ“€κΈ°

  • μ‚­μ œ λ²„νŠΌ 클릭 μ‹œ ν•΄λ‹Ή to do listκ°€ μ‚­μ œλ  수 μžˆλ„λ‘ event.target.parentElementλ₯Ό μ΄μš©ν•΄ μ‚­μ œν•  li μš”μ†Œ 선택
const toDoForm = document.querySelector('#todo-form');
const toDoInput = toDoForm.querySelector('input');
const toDoList = document.querySelector('#todo-list');

// μ‚­μ œ λ²„νŠΌ 클릭 이벀트 λ¦¬μŠ€λ„ˆ ν•¨μˆ˜
function deleteToDo(event) {
  event.target.parentElement.remove();
}

function paintToDo(toDo) {
  const li = document.createElement('li');
  const span = document.createElement('span');
  span.innerText = toDo;
  // μ‚­μ œ λ²„νŠΌ μΆ”κ°€
  const delBtn = document.createElement('button');
  delBtn.innerText = '❌';
  delBtn.addEventListener('click', deleteToDo);
  li.appendChild(span);
  li.appendChild(delBtn);
  toDoList.appendChild(li);
}

function onToDoSubmit(event) {
  event.preventDefault();
  const newToDo = toDoInput.value;
  toDoInput.value = '';
  paintToDo(newToDo);
}

toDoForm.addEventListener('submit', onToDoSubmit);

(2) to do list μ €μž₯ν•˜κΈ°

πŸ”Ž 둜컬 μŠ€ν† λ¦¬μ§€μ— to do list μ €μž₯ ν›„ 뢈러였기

[TIL] 211011 4) 직렬화 μ°Έκ³ 

  • μƒˆλ‘œκ³ μΉ¨μ„ 해도 μž‘μ„±ν•œ to do listκ°€ 없어지지 μ•Šλ„λ‘ ν•˜κ³ μž 함

  • todos 배열을 λ§Œλ“€μ–΄ todoλ₯Ό μž‘μ„±ν•  λ•Œλ§ˆλ‹€ κ·Έ ν…μŠ€νŠΈλ₯Ό push ν•΄μ€€λ‹€

  • toDoForm에 submit μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ todos λ°°μ—΄μ˜ 각 μš”μ†Œλ“€μ„ 둜컬 μŠ€ν† λ¦¬μ§€μ— μ €μž₯ν•œλ‹€. μ΄λ•Œ 둜컬 μŠ€ν† λ¦¬μ§€μ—λŠ” 무쑰건 λ¬Έμžμ—΄λ‘œ λ³€ν™˜λ˜μ–΄ μ €μž₯λœλ‹€. μ΄λ•Œ κ·Έλƒ₯ todosλ₯Ό μž…λ ₯ν•˜λŠ” 게 μ•„λ‹ˆλΌ JSON.stringify(todos)λ₯Ό μž…λ ₯ν•΄ λ°°μ—΄ ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ μ €μž₯ν•˜λ„λ‘ ν•œλ‹€.

  • κ·Έ ν›„ 둜컬 μŠ€ν† λ¦¬μ§€μ— todosκ°€ μ‘΄μž¬ν•œλ‹€λ©΄, JSON.parse()λ₯Ό μ΄μš©ν•΄ λ°°μ—΄ ν˜•μ‹μ˜ todos λ¬Έμžμ—΄μ„ λ‹€μ‹œ λ°°μ—΄λ‘œ λ°”κΏ”μ€€λ‹€.

  • κ·Έλ ‡κ²Œ λ°”κΎΌ todos 배열에 forEach() λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•¨μœΌλ‘œμ¨ λ°°μ—΄μ˜ 각 μš”μ†Œ 즉, 각 todo listλ§ˆλ‹€ paintToDo() ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•΄ 화면에 ν‘œμ‹œλ˜λ„λ‘ ν•œλ‹€.

const toDoForm = document.querySelector('#todo-form');
const toDoInput = toDoForm.querySelector('input');
const toDoList = document.querySelector('#todo-list');

const TODOS_KEY = 'todos';

const todos = []; // todos λ°°μ—΄ 생성

function saveToDos() {
  localStorage.setItem(TODOS_KEY, JSON.stringify(todos)); // λ°°μ—΄ ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•΄ μ €μž₯
}

function deleteToDo(event) {
  event.target.parentNode.remove();
}

function paintToDo(toDo) {
  const li = document.createElement('li');
  const span = document.createElement('span');
  span.innerText = toDo;
  const delBtn = document.createElement('button');
  delBtn.innerText = '❌';
  delBtn.addEventListener('click', deleteToDo);
  li.appendChild(span);
  li.appendChild(delBtn);
  toDoList.appendChild(li);
}

function onToDoSubmit(event) {
  event.preventDefault();
  const newToDo = toDoInput.value;
  toDoInput.value = '';
  todos.push(newToDo); // μƒˆλ‘œμš΄ todoλ₯Ό todos 배열에 push
  paintToDo(newToDo);
  saveToDos(); // 둜컬 μŠ€ν† λ¦¬μ§€μ— to do list μ €μž₯
}

toDoForm.addEventListener('submit', onToDoSubmit);

// 둜컬 μŠ€ν† λ¦¬μ§€μ—μ„œ todos 뢈러였기
const savedToDos = localStorage.getItem(TODOS_KEY);

if (savedToDos) {
  const parsedToDos = JSON.parse(savedToDos); // λ‹€μ‹œ λ°°μ—΄ ν˜•μ‹μœΌλ‘œ λ³€ν™˜
  parsedToDos.forEach(todo => paintToDo(todo)); // λ°°μ—΄μ˜ 각 μš”μ†Œ(todo)λ₯Ό 화면에 띄움
}
  • 이제 todosλ₯Ό μž…λ ₯ ν›„ λ‹€μ‹œ μƒˆλ‘œκ³ μΉ¨μ„ 해도 todosκ°€ 사라지지 μ•ŠλŠ”λ‹€. κ·ΈλŸ¬λ‚˜, todosλ₯Ό μΆ”κ°€ν•œ ν›„ μƒˆλ‘œκ³ μΉ¨μ„ ν•˜λ©΄ μΆ”κ°€ν•œ todos만 보이고, μ²˜μŒμ— μž…λ ₯ν•œ todosλŠ” 보이지 μ•ŠλŠ”λ‹€. 둜컬 μŠ€ν† λ¦¬μ§€λ₯Ό 보면 μΆ”κ°€ν•œ todos만 μ €μž₯λ˜μ–΄ μžˆλŠ” κ±Έ 확인할 수 μžˆλ‹€.

  • μ΄λŠ” todos 배열이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ  λ•Œ 항상 빈 λ°°μ—΄ μƒνƒœμ΄κΈ° λ•Œλ¬Έμ΄λ‹€. μƒˆλ‘œκ³ μΉ¨ ν•  λ•Œλ§ˆλ‹€ todos 배열이 빈 λ°°μ—΄λ‘œ μ΄ˆκΈ°ν™”λ˜κΈ° λ•Œλ¬Έμ—, 이전에 둜컬 μŠ€ν† λ¦¬μ§€μ— μ €μž₯ν–ˆλ˜ todosκ°€ μ—†μ–΄μ§€κ²Œ λ˜λŠ” 것이닀.

  • 이 λ¬Έμ œλŠ” 둜컬 μŠ€ν† λ¦¬μ§€μ— todosκ°€ μžˆλ‹€λ©΄ todos 배열을 parsedToDos둜 μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μƒˆλ‘œκ³ μΉ¨μ„ ν–ˆμ„ λ•Œ 둜컬 μŠ€ν† λ¦¬μ§€μ—λŠ” todosκ°€ μžˆμœΌλ―€λ‘œ todosλ₯Ό parseTodos둜 λ°”κΎΈκ²Œ λœλ‹€. λ”°λΌμ„œ, todoλ₯Ό 좔가해도 parseTodos μƒνƒœμ—μ„œ μΆ”κ°€ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ 이전에 μž…λ ₯ν•œ todosκ°€ 없어지지 μ•ŠλŠ”λ‹€.

let todos = []; // let으둜 λ°”κΎΌ ν›„

const savedToDos = localStorage.getItem(TODOS_KEY);

if (savedToDos) { // 둜컬 μŠ€ν† λ¦¬μ§€μ— todosκ°€ μžˆλ‹€λ©΄
  const parsedToDos = JSON.parse(savedToDos);
  todos = parsedToDos; // todos 배열을 μ—…λ°μ΄νŠΈ
  parsedToDos.forEach(todo => paintToDo(todo));
}

✨ 내일 ν•  것

  1. 클둠코딩 계속
profile
λŠ₯λ™μ μœΌλ‘œ μ‚΄μž, ν–‰λ³΅ν•˜κ²ŒπŸ˜

0개의 λŒ“κΈ€