๐Ÿ’ป Intro

๋…ธ์…˜ ํด๋ก  ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ 3์ผ์ฐจ! ํฐ ์ง„์ „์€ ์—†์—ˆ๋‹ค. ๋ฌธ์„œ ํŠธ๋ฆฌ ๊ตฌํ˜„ ์ค‘ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒํ•ด์„œ ๋งŽ์€ ์‹œ๊ฐ„์„ ์žก์•„๋จน์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค ใ… ใ… 
์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๊ฒƒ ๊ฐ™์œผ๋ฉด์„œ๋„ ์„ธ์„ธํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์•˜๋‹ค.
state ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ์•„์ง state ๊ตฌ์กฐ์— ๋Œ€ํ•œ ํ™•๋ฆฝ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์ผ์ผํžˆ ํ™•์ธํ•˜๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ๋ฐฐ๋กœ ๊ฑธ๋ ธ๋‹ค.


๐Ÿง ์ด๋ฒˆ ์ฃผ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ๊ฒƒ

export vs export default

export๋Š” ํ•จ์ˆ˜๋ช… ๋ฐ ๊ฐ์ฒด๋ช…์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋„๋ก ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์ด๊ณ  default export๋Š” import์‹œ ์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค. (๊ธฐ์กด์— as๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฐ”๋กœ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ import๊ฐ€ ๊ฐ€๋Šฅ)

๋”ฐ๋ผ์„œ ํ•œ ๋ชจ๋“ˆ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ export๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” export, ํ•œ ๋ชจ๋“ˆ ์•ˆ์— exportํ•˜๋Š” ๋Œ€์ƒ์ด ์œ ์ผํ•˜๋‹ค๋ฉด export default๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.


์žฌ๊ท€ ํ•จ์ˆ˜ ๋‚ด forEach ์ˆœํšŒ ์ด์Šˆ

์–ด์ œ ๋…ธ์…˜ ์‚ฌ์ด๋“œ ๋„ค๋น„๋ฐ”์— ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ ์ „์ฒด ๋ฌธ์„œ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์žฌ๊ท€ ํ•จ์ˆ˜ makeDocTree ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฃจํŠธ ๋ฌธ์„œ๋‚˜ ์ตœํ•˜์œ„ ๋ฌธ์„œ๊ฐ€ ์•„๋‹Œ ์ค‘๊ฐ„ ๋ ˆ๋ฒจ์˜ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฌธ์„œ๊ฐ€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์œ„ ์‚ฌ์ง„์—์„œ 102963์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค.
๋ฌธ์ œ๋Š” ๊ฐ™์€ ๋ށ์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฃจํŠธ ๋ฌธ์„œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์ผ€์ด์Šค์˜€๋Š”๋ฐ ์ด ๋•Œ ์ฒซ ๋ฒˆ์งธ(0๋ฒˆ์งธ) ๋ฌธ์„œ๋งŒ ์žฌ๊ท€๋กœ ํŒŒ๊ณ  ๋“  ๊ฒƒ์ด ์›์ธ์ด์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฃจํŠธ ๋ฌธ์„œ์—์„œ forEach๋ฅผ ํ†ตํ•ด ์ˆœํšŒํ•˜์—ฌ ๋น ์ง์—†์ด ๋ฌธ์„œ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.
๊ธฐ์กด์—๋Š” domTree๋ฅผ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ด๋‚˜๊ฐ€๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์—ˆ๋Š”๋ฐ ๋ฃจํŠธ ๋ฌธ์„œ ๋ฐฐ์—ด ์ˆœํšŒ๋ฅผ ์œ„ํ•ด SideNav.js์˜ docList ๋ฐฐ์—ด์— push ํ•ด๋‚˜๊ฐ”๋‹ค.
์ดํ›„ join์„ ํ†ตํ•ด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ innerHTML๋กœ ๋ฌธ์„œ ํŠธ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

let docList = [];

makeDocTree(this.state.docsTree, 1, docList);

const joinDoc = docList.join('');
$navDocuments.innerHTML = joinDoc;


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

์ƒํƒœ ๊ด€๋ฆฌ

๋ณธ๊ฒฉ์ ์œผ๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์—๋””ํ„ฐ์˜ header์™€ textarea์— ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.
์‚ฌ์ด๋“œ ๋„ค๋น„๋ฐ”์—์„œ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์„ ํƒํ•œ ๋ฌธ์„œ์˜ ๋ฐ์ดํ„ฐ(selectedDoc)๋ฅผ ์ „์—ญ ์ƒํƒœ์— ์—…๋ฐ์ดํŠธํ•˜์˜€๋‹ค. ์ „์—ญ ์ƒํƒœ๋กœ๋ถ€ํ„ฐ editPage๋กœ selectedDoc ์•ˆ์˜ title๊ณผ content๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ํ‘œ์‹œํ•˜์˜€๋‹ค.

์—„์ฒญ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์ž‘์—…์ด์—ˆ์ง€๋งŒ 2์‹œ๊ฐ„์„ ๊ผฌ๋ฐ• ์‚ฌ์šฉํ–ˆ๋‹ค. state ๊ฐ’์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋งŽ์ด ๋ถ€์กฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— console.log๋กœ ์ผ์ผํžˆ ํ™•์ธํ•˜๋‹ค๋ณด๋‹ˆ ๋งŽ์ด ๋ฒ„๋ฒ…์˜€๋‹ค.
์ €๋…์— ํ˜„์ฃผ ๋ฉ˜ํ† ๋‹˜๊ณผ ์ปคํ”ผ์ฑ—์—์„œ state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์กฐ์ง๋„๋ฅผ ํ†ตํ•ด state ๊ฐ’์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•œ ๋ชจ์‹๋„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ์‹์„ ์ถ”์ฒœ๋ฐ›์•˜๋‹ค.
์•ž์œผ๋กœ ์ง„ํ–‰ํ•  state ๊ด€๋ฆฌ๋Š” ๋ชจ์‹๋„๋ฅผ ๋ฌธ์„œํ™”ํ•ด์„œ ํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.



๐Ÿ‘€ ๋А๋‚€์ 

KPT ์• ์ž์ผ ํšŒ๊ณ  ๋ฐฉ์‹์„ ๋„์ž…ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๐Ÿ‘ Keep

  • ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ํŒ€์›๋“ค๊ณผ ์Šคํฌ๋Ÿผ ๋•Œ ์ž˜ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์„ ๋ฐ”๋กœ ๊ณต์œ ํ•˜๋ฉด์„œ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•ด๋ณด๋‹ˆ ํ•ด๊ฒฐ์˜ ์‹ค๋งˆ๋ฆฌ๊ฐ€ ์ฐพ์•„์กŒ๋‹ค!
    ์•ž์œผ๋กœ๋„ ํ˜ผ์ž ๋™๋™ ์•“๊ธฐ๋ณด๋‹ค ์ฃผ๋ณ€ ๋™๊ธฐ๋“ค์—๊ฒŒ ๋„์›€์˜ ์†๊ธธ์„ ์š”์ฒญํ•ด์•ผ๊ฒ ๋‹ค.

๐Ÿ˜ฑ Problem

  • ์•„์ง state ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ตฌํ˜„์ด ์ต์ˆ™์น˜๊ฐ€ ์•Š๋‹ค.
    ์•ž์œผ๋กœ react๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” state์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ํ•„์ˆ˜์ด๊ธฐ์— ์ปดํฌ๋„ŒํŠธ ์กฐ์ง๋„๋ฅผ ํ†ตํ•ด state ๊ด€๋ฆฌ๋ฅผ ํ•ด๋ด์•ผ ๊ฒ ๋‹ค.

  • ์žฌ๊ท€ ๋กœ์ง ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋ถ„๊ธฐํ•˜๋‹ค๋ณด๋‹ˆ ๋ฐ˜ํ™˜๊ฐ’์— ๋Œ€ํ•œ ์ง‘์ฐฉ์ด ์ƒ๊ฒจ์„œ undefined๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์ด์Šˆ๋ฅผ ๊ฒช์—ˆ๋‹ค.
    ๊ตณ์ด ๋ฐ˜ํ™˜์„ ํ•˜๊ธฐ๋ณด๋‹ค ์™ธ๋ถ€์— ๊ฒฐ๊ณผ๊ฐ’์„ ๋‘๊ณ  ์ด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋‹ˆ ๋ฐ”๋กœ ํ•ด๊ฒฐ์ด ๋๋‹ค!

๐Ÿ˜œ Try

  • ์ปดํฌ๋„ŒํŠธ ๋ชจ์‹๋„ ๊ทธ๋ฆฌ๋ฉด์„œ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ํ•˜๊ธฐ
  • ์ƒํƒœ ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ฌธ์„œํ™”
  • history API url ๊ตฌํ˜„
  • ์—๋””ํ„ฐ ๊ฐ’ ์ˆ˜์ • ๋ฐ state์™€์˜ ์—…๋ฐ์ดํŠธ


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

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

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

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