๐Ÿ” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค FE ๋ฐ๋ธŒ์ฝ”์Šค 5๊ธฐ TIL 231018

Jun 2k (Jun2)ยท2023๋…„ 10์›” 18์ผ
0

๐Ÿ’ป Intro

๋…ธ์…˜ ํด๋กœ๋‹ ํ”„๋กœ์ ํŠธ 2์ผ์ฐจ์— ๋Œ์ž…ํ–ˆ๋‹ค. ์ตœ๊ทผ ์–ผ๋งˆ ๋™์•ˆ ๊ณผ์ œ์™€ ๊ฐ•์˜๋Ÿ‰์ด ๋งŽ์•„ TIL๋ฅผ ์ž‘์„ฑํ•  ์—ฌ๋ ฅ์ด ์—†์–ด ์ž‘์„ฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
์ €๋ฒˆ์ฃผ ํ† ์š”์ผ ๋ฐฐ๋ฏผ์˜ ๋งˆ๊ด‘ํœ˜ ๋‹˜์˜ ๊ฐ•์—ฐ์—์„œ ๊ธฐ๋ก์˜ ์Šต๊ด€ํ™”์™€ ์ค‘์š”์„ฑ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊นจ๋‹ซ๊ณ  ๋ฌด์˜๋ฏธํ•œ ๋‚˜์—ด์‹ TIL๋ณด๋‹ค ์‚ฌ์†Œํ•œ ๊ฒƒ์ด๋ผ๋„ ๋‚ด๊ฐ€ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋“ค์„ ๋‚จ๊ธฐ๋Š” ์‹์œผ๋กœ ์ง„ํ–‰ํ•  ์ƒ๊ฐ์ด๋‹ค.


๐Ÿง ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ๊ฒƒ

์žฌ๊ท€ ํ•จ์ˆ˜์˜ ํ•จ์ •

๋…ธ์…˜ ํด๋กœ๋‹ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ์‚ฌ์ด๋“œ ๋„ค๋น„๋ฐ”์— ํ‘œ์‹œํ•  ๋ฌธ์„œ ๋ชฉ๋ก์„ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋ฝ‘์•„๋‚ด์•ผ ํ–ˆ๋‹ค. ์ด๋ฅผ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ•˜์œ„ ๋ฌธ์„œ๊ฐ€ ์—†์„๋•Œ๊นŒ์ง€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ๋”ฐ๋กœ ๊ตฌํ˜„ํ–ˆ์œผ๋‚˜ console.log๋กœ๋Š” ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€๋งŒ ๋งˆ์ง€๋ง‰ ๋ฐ˜ํ™˜๊ฐ’์ด undefined๊ฐ€ ์ž๊พธ ๋‚˜์™”๋‹ค.

export function makeDocTree(root, depth, domTree) {
  // domTree์— root ๋ฌธ์„œ ์š”์†Œ ์ถ”๊ฐ€...
  domTree += ...

  // ํ•ด๋‹น root ๋ฌธ์„œ๊ฐ€ ํ•˜์œ„ ๋ฌธ์„œ๊ฐ€ ์—†์œผ๋ฉด
  if (root.documents.length === 0) {
    return domTree; 
  }
  // ์žฌ๊ท€
  makeDocTree(root.documents[0], depth + 1, domTree);
}

์ด์œ ๋Š” ๊ฐ„๋‹จํ–ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๋‹ˆ ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” 3๊ฐ€์ง€ ์›์น™์ด ์žˆ์—ˆ๋‹ค.

  1. Base Case๋ฅผ ๋ช…ํ™•ํžˆ ์ž‘์„ฑ
  2. Base Case๊ฐ€ ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์žฌ๊ท€ Case๋ฅผ ๋ช…ํ™•ํžˆ ์ž‘์„ฑ
  3. ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฌผ๊นŒ์ง€ ์ตœ๋Œ€ํ•œ ์ ‘๊ทผํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ return. ์ผ๋ฐ˜์ ์œผ๋กœ 2๊ฐœ์˜ return์ด ์กด์žฌ

๋‚˜๋Š” ์›์น™์˜ 3๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ง€ํ‚ค์ง€ ์•Š์•„์„œ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด undefined ๋‚˜์˜ค๊ฒŒ ๋œ ๊ฒƒ์ด์—ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์›ํ•˜๋Š” Dom Tree HTML ์š”์†Œ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

...
// ์žฌ๊ท€
  return makeDocTree(root.documents[0], depth + 1, domTree);
...

๋‹จ์ˆœํžˆ ์žฌ๊ท€ ํ•จ์ˆ˜๋งŒ ๋ฐ˜๋ณตํ•  ๊ฒฝ์šฐ ์›ํ•˜๋Š” return ๊ฐ’์ด ๋ˆ„๋ฝ๋˜์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ ์‚ฌ์ด๋“œ ๋„ค๋น„๋ฐ”์— ํ‘œ์‹œํ•œ ๋ฌธ์„œ ๋ชฉ๋ก ์˜ˆ์‹œ ์‚ฌ์ง„์ด๋‹ค.

blur ์ด๋ฒคํŠธ

๋…ธ์…˜ ๊ธ€ ์—๋””ํ„ฐ์—์„œ ์ œ๋ชฉ <input> ํƒœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ–ˆ๋‹ค.

  1. ๋นˆ ์ œ๋ชฉ์ผ ๊ฒฝ์šฐ placeholder ๊ฐ’์ด ์ œ๋ชฉ ์—†์Œ์ด์–ด์•ผ ํ•œ๋‹ค.
  2. ์ œ๋ชฉ์„ ์ž…๋ ฅํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ (focus๋˜์—ˆ์„ ๊ฒฝ์šฐ) placeholder ๊ฐ’์ด ์ œ๊ฑฐ๋˜์–ด์•ผ ํ•œ๋‹ค.
  3. ์ดํ›„ ๋‹ค์‹œ ์ œ๋ชฉ์ด ๋นˆ ๊ฐ’์ด ๋˜๋ฉด ๋‹ค์‹œ placeholder ๊ฐ’์ด ์›์ƒ๋ณต๊ท€๋˜์–ด์•ผ ํ•œ๋‹ค.

focus ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ๊ณ  ์žˆ์—ˆ์œผ๋‚˜ focus๊ฐ€ ํ•ด์ œ๋˜์—ˆ์„ ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ์ด๋ฒคํŠธ ๋ช…์„ ๊ฐ€์ง€๋Š”์ง€ ๋ชฐ๋ž๋‹ค. ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ํ•ด๋‹น ์ด๋ฒคํŠธ๋Š” blur์˜€๋‹ค.

์•„๋ž˜๋Š” ์œ„์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋„๋ก ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ค์ •ํ•œ ์ฝ”๋“œ์ด๋‹ค.

 const $editHeaderInput = document.querySelector('input#title');

  $editHeaderInput.addEventListener('focus', (e) => {
    const $input = e.target;
    $input.placeholder = '';
  });

  $editHeaderInput.addEventListener('blur', (e) => {
    const $input = e.target;
    if ($input.text !== '') $input.placeholder = '์ œ๋ชฉ ์—†์Œ';
  });


๐Ÿ™„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ๋” ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฒƒ

async-await

์•„์ง๊นŒ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋น„๋™๊ธฐ Promise์— ๋Œ€ํ•œ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ๋ฅผ ์—ฌ์ฐจ์ €์ฐจ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ ์–ด๋–ค ๊ณผ์ •์— ์˜ํ•ด์„œ ๋˜๋Š”์ง€ ์• ๋งค๋ชจํ˜ธํ•œ ์ƒํ™ฉ์ด๋‹ค.
MDN ๊ณต์‹ ๋ฌธ์„œ์™€ ๋ชจ๋˜ ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๊ธฐ์ˆ ๋œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์ •๋…ํ•˜๊ณ  Promise์™€ async-await์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ™•๋ฆฝํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.



๐Ÿ‘€ ๋А๋‚€์ 

๋…ธ์…˜ ํด๋ก  ์ฝ”๋”ฉ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋งจ๋•…์—์„œ๋ถ€ํ„ฐ ์ฝ”๋”ฉ์„ ํ˜ผ์ž ๊ณ ๋ฏผํ•˜๋ฉด์„œ ํ•˜๊ฒŒ ๋˜๋‹ˆ ์ง„์งœ ์‹ค๋ ฅ์ด ์กฐ๊ธˆ์”ฉ ๋А๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค!! (๋ฐฑ๋ฌธ์ด ๋ถˆ์—ฌ์ผํƒ€๊ฐ€ ๋งž๋Š”๋“ฏ)
๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ์–ด๋–ค ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ• ์ง€, ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ํ•จ์ˆ˜์™€ ์ปดํฌ๋„ŒํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ๊ฒƒ์ธ์ง€ ๋ฏธ๋ฆฌ ๊ตฌ์ƒํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๋…ธ์…˜๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋‹ˆ ๋ญ”๊ฐ€ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.
๋‚ด์ผ์€ ๊ธ€ ์—๋””ํ„ฐ์™€ ์‚ฌ์ด๋“œ ๋„ค๋น„๋ฐ” ๋ฌธ์„œ๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๊ฒƒ๊ณผ History API๋กœ SPA ๊ตฌํ˜„์„ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ์•„์ž์•„์ž!! ๐Ÿ˜œ



๐Ÿ˜… ํ•ด๋‹น ๋‚ด์šฉ์€ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด๋‚˜ ์˜คํ•ดํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ ˆํผ๋Ÿฐ์Šค

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ค€๋น„์ค‘...

0๊ฐœ์˜ ๋Œ“๊ธ€