TIL 0321

zittoยท2023๋…„ 3์›” 25์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
7/77
post-thumbnail

๐Ÿท๏ธ [๋ชฉ์ฐจ]

  • props drilling
  • emotion์— props๋˜์ง€๊ธฐ
  • ๋ฆฌ์•กํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋” ํ•˜๋Š” ๋ฐฉ์‹
  • ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ router ์‚ฌ์šฉ์‹œ ์ฃผ์˜์ 
  • ์ฃผ์†Œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฒ•

๐Ÿ–‡๏ธ [์ถœ์ฒ˜ ๋ฐ ์ฐธ์กฐ]

์ฝ”๋“œ์บ ํ”„



๐Ÿ’กย props drilling?

props๊ฐ€ ์ž์‹์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋Š” ๋‹จ๊ณ„๊ฐ€ ๋‘๋‹จ๊ณ„ ์ด์ƒ๋  ๊ฒฝ์šฐ props drilling์ด ์ผ์–ด๋‚ฌ๋‹ค๊ณ  ํ•œ๋‹ค.
props drilling์€ ๊ณผ๋„ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ, ๊ณผ๋„ํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง€๋ฉด ํ•ด๋‹น props๊ฐ€ ์–ด๋””์„œ ๋‚ด๋ ค์ง€๊ณ  ์žˆ๋Š”์ง€ ์ฐพ๋Š”๊ฒƒ์ด ๊ต‰์žฅํžˆ ๋‚œํ•ดํ•ด์ง„๋‹ค.
๋”ฐ๋ผ์„œ ์ตœ๋Œ€ํ•œ drilling์ด ์•ˆ์ผ์–ด๋‚˜๊ฒŒ ํ•ด์ฃผ์‹œ๋Š” ๊ฒƒ์ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.
props drilling์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” global state๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

๐Ÿ’ก emotion์— props ๋˜์ง€๊ธฐ

emotion์— props๋ฅผ ๋˜์ง€๊ธฐ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ${ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด}์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
๋ฐฑํ‹ฑ ์•ˆ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ${}๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
emotion์œผ๋กœ props๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ™œ์šฉ๋ฒ•์€ ๋ฌด๊ถ๋ฌด์ง„ํ•˜๋‹ค
onClick ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ onMouseOver / onMouseLeave ๋“ฑ ํƒœ๊ทธ์—๋Š” on์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ์†์„ฑ์ด ์ •๋ง ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž„!
true / false ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ String, Number ํƒ€์ž…๋„ ๋ชจ๋‘ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŠน์ • ์ƒํ™ฉ์—์„œ CSS ๋ณ€๊ฒฝ์€ ๋ชจ๋‘ emotion์œผ๋กœ props ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ๋ฆฌ์•กํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”ํ•˜๋Š” ๋ฐฉ์‹

setState๋Š” ๋น„๋™๊ธฐ๋กœ ์ž‘๋™ ํ•œ๋‹ค.
setState๊ฐ€ ๋™๊ธฐ๋กœ ์ž‘๋™ํ•˜๊ฒŒ๋˜๋ฉด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋กœ๋ฐ”๋กœ ๋ Œ๋”๋ง์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.
๋”ฐ๋ผ์„œ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ž„์‹œ ์ €์žฅ์†Œ์— ๋ชจ์•„๋‘์—ˆ๋‹ค๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋๊นŒ์ง€ ์ฝ๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ํ•œ๋ฒˆ์— ๋ฐ”๊ฟ”์„œ ๋ Œ๋”๋งํ•œ๋‹ค.

โœ… ๋ฆฌ๋ Œ๋”๊ฐ€ ๋˜๋Š” ์ƒํ™ฉ

  1. ์ƒˆ๋กœ์šด props๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ
  2. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ
  3. ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ(forceUpdate)๊ฐ€ ์‹คํ–‰๋  ๋•Œ
  4. state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ

โœ… setState์˜ ๋น„๋™๊ธฐ์  ํŠน์„ฑ์˜ˆ์‹œ

์•„๋ž˜์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์˜ˆ์ƒ๋˜๋Š” ๊ฐ’์€?

export default function stateTest(){
const [value,setValue]=useState(0)
const onClick = () => {
    setValue(value+1)
    setValue(value+1)
    setValue(value+1)
  }
return (
    <div className="App">
      <button onClick={onClick}>+</button>
      <h1>{value}</h1>
    </div>);
}

โ†’ ์ •๋‹ต์€ 1
์ด๋Š” setState๊ฐ€ ๋น„๋™๊ธฐ์  ํŠน์„ฑ์„ ๊ฐ–๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.
(๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋ฐ”๋กœ ๋‚ด๋ ค๊ฐ€์„œ ๋˜ 1์„ ๋”ํ•˜๊ณ  ๋˜ 1์„ ๋”ํ•ด 3์ด ๋‚˜์™”์„ ๊ฒƒ ์ด๋‹ค.)

  • ์‹ค์Šต
    -> input์ฐฝ์— ์ž…๋ ฅ์‹œ ํ•œ ๊ธ€์ž์”ฉ๋งŒ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋ฒ„ํŠผ์˜ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š๋‹ค๊ฐ€, 1๊ธ€์ž ๋” ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ๋•Œ์„œ์•ผ ๋ฒ„ํŠผ์— ์ƒ‰๊น”์ด ์ž…ํ˜€์ง

    ์ด๋Š” ์ž…๋ ฅํ• ๋•Œ๋งˆ๋‹ค state๊ฐ€ ๋ฐ”๋€Œ๊ณ  ๋ฐ”๋€ state๋กœ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์—์„œ ๋ถ€๋ชจ์ž์‹ ์ „์ฒด๊ฐ€ ๋ฆฌ๋ Œ๋” ๋˜๋Š” ์ƒํ™ฉ์ธ ๊ฒƒ์ด๊ณ  ์‚ฌ์‹ค์€ ๋นˆ๊ฐ’์ธ๋ฐ ์‹ค์ œ ์šฐ๋ฆฌ ๋ˆˆ์—์„œ๋Š” document.getEelementById("")๊ฐ€ ์ž๋™์‹คํ–‰ ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„
    (use๋กœ ๋งŒ๋“ค์–ด์ง„ ์• ๋“ค์€ ์ œ์™ธ -> memorization์œผ๋กœ ์ตœ์ ํ™” ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ๋”ฐ๋กœ ์žˆ์Œ)

<ํ•ด๊ฒฐ๋ฐฉ๋ฒ•>

-> writer, title,contents๋กœ ๋น„๊ต๋ฅผ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
์•ˆ์—์„œ ๊ฒ€์ฆํ•  ๋•Œ๋Š” ๊ทธ ๋“ค์–ด์˜จ ๊ฐ’์œผ๋กœ ๋น„๊ต๋ฅผ ํ•ด์•ผ
๋งˆ์ง€๋ง‰์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ๋๋‚ ๋•Œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ค€๋‹ค.


๐Ÿ’ก ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ router ์‚ฌ์šฉ์‹œ ์ฃผ์˜์ 

router.query ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํŽ˜์ด์ง€ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š”๊ฑด ์•„๋‹ˆ๋‹ค.
๋ผ์šฐํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,
BoardDetail ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

โœ… router ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ์ 

๋‹จ, ๋ผ์šฐํ„ฐ๊ฐ€ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉ ํ•  ๋•Œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ๋ผ์šฐํŒ… ํด๋”[aaa]๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ํ™•์ธํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ํ•ด์•ผํ•œ๋‹ค.
ํด๋”๊ฐ€ ์—†๋Š”๊ณณ์— router.query๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ€๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค.
๋˜ํ•œ, router.query๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š”
์ฝ˜์†”์— router.query๋ฅผ ์ฐ์–ด๋ณด๊ณ ,
์•ˆ์— ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ํ•„์š”ํ•œ ๊ฑธ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


๐Ÿ’ก์ฃผ์†Œ ์„ค๊ณ„ํ•˜๋Š” ๋ฒ•

1.๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก : /boards
2.๊ฒŒ์‹œ๋ฌผ ๋“ฑ๋ก : /boards/new
3.๋‹ค์ด๋‚˜๋ฏน ๋ผ์šฐํŒ…(ํŠน์ • ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ)
- /boards/: id โ†’ :์œผ๋กœํ‘œ๊ธฐ
- /borads/[id] โ†’ [ ]์œผ๋กœ ํ‘œ๊ธฐ
4.๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •ํ•˜๊ธฐ
- /boards/:id/edit
- /boards/[id]/edit

โ†’ ์ˆ˜์ •์€ ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์˜
id๋กœ ๋‹ค์ด๋‚˜๋ฏน ๋ผ์šฐํŒ…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

โœ… ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜, ํด๋” ๋„ค์ž„

์‹ค๋ฌด์—์„œ ๋ณ€์ˆ˜๋ช…์ด๋‚˜ ํด๋”, ์ปดํฌ๋„ŒํŠธ๋ช…์„ ๋งˆ์Œ๋Œ€๋กœ ํ•˜๊ฒŒ๋˜๋ฉด ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒŒ๋˜์—ˆ์„๋•Œ ์–ด๋–ค ๋ถ€๋ถ„์ธ์ง€ ์•Œ๊ธฐ ์–ด๋ ค์›€.
์‹ค๋ฌด์—์„œ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์„ ์œ„ํ•œ ๋ณ€์ˆ˜์ธ์ง€, ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋‚˜ ํด๋”๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์ธ์ง€ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

// ์ˆซ์ž๋ฅผ ์นด์šดํŠธ ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ
let count;
// ๋‚ ์งœ ๊ด€๋ จ ๋ณ€์ˆ˜ ์„ ์–ธํ•˜๊ธฐ
let Date;
//๋ฉ”์ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด
export default function Main(){
		return( ...์ฝ”๋“œ )
}


๐ŸฅšMEMO

  1. ๋„ˆ๋ฌด ํ’€๋ฆฌ์ง€ ์•Š์œผ๋ฉด ์›๋ฆฌ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž(๊ธฐ์ดˆ๋ถ€ํ„ฐ ๋Œ์•„๊ฐˆ ๊ฒƒ!)
  2. router = ๊ฒฝ๋กœ์ด๋™!!! ํ•˜์ง€๋งŒ router,query๊ฐ™์€ ๊ฒƒ๋“ค์€ ์•„๋ฌด๋ฐ์„œ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ! [dynamicrouting] ํด๋”์—์„œ ๊ฐ€๋Šฅํ•จ!
  3. date={date} ---> props๋กœ ์ „๋‹ฌ
  4. state๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ state๊ฐ€ ๋ฐ”๋€Œ๊ณ  ๋ฐ”๋€Œ๋Š” ๊ฐ’์„ ์ €์žฅ์„ ํ•œ๋‹ค.
    ์ €์žฅ์ด ๋˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๊ทธ๋ ค์ง€๊ฒŒ ๋จ.
    ์ž„์‹œ์ €์žฅ๊ณต๊ฐ„์— ์ž…๋ ฅํ•ด ๋†“๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋์ด ๋‚œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์ž„์‹œ์ €์žฅ๊ณต๊ฐ„์„ ํ™•์ธ ํ›„์— ๋ฐ”๋€ ๊ฐ’์„ ํ™•์ธ ํ›„ ํ™”๋ฉด์— ๊ทธ๋ ค์ง„๋‹ค.
profile
JUST DO WHATEVER

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