State & Props

hyena_leeยท2023๋…„ 1์›” 26์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
26/42
post-thumbnail

๐ŸŒ–props ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๊ฐ’ ์ „๋‹ฌํ•˜๊ธฐ

์ด๋ฒˆ์—๋Š” ์ปดํฌ๋„ŒํŠธ์˜ props ๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. props ๋Š” properties ์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์–ด๋– ํ•œ ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ด์ค˜์•ผ ํ•  ๋•Œ, props ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. Props๋Š” Properties์˜ ์ค„์ž„๋ง.
  2. Props๋Š” ์ƒ์†ํ•˜๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ž๋…€ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋“ฑ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  3. Props๋Š” ์ฝ๊ธฐ ์ „์šฉ(immutable)์œผ๋กœ ์ž๋…€ ์ปดํฌ๋„ŒํŠธ ์ž…์žฅ์—์„œ๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    (๋ณ€ํ•˜๊ฒŒ ํ•˜๊ณ ์ž ํ•˜๋ฉด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ state๋ฅผ ๋ณ€๊ฒฝ์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค.)

๋ถ€๋ชจ Board ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ Square ์ปดํฌ๋„ŒํŠธ๋กœ โ€œprop์„ ์ „๋‹ฌโ€ํ–ˆ์Šต๋‹ˆ๋‹ค. props ์ „๋‹ฌํ•˜๊ธฐ๋Š” React ์•ฑ์—์„œ ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ ์ •๋ณด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜๋Ÿฌ๊ฐ€๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์˜ˆ>
A ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ : state = { a : "a" }

< B ์ปดํฌ๋„ŒํŠธ aProps= {this.state.a} />

B ์ž์‹ ์ปดํฌ๋„ŒํŠธ a state ํ•„์š” : this.props.aProps


๐ŸŒ–State

๋ฆฌ์•กํŠธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ ํ™”๋ฉด์„ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” React State๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž๋…€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š”๊ฒŒ ์•„๋‹Œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด?
    State์œผ๋กœ
    => ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๊ฒ€์ƒ‰ ์ฐฝ์— ๊ธ€์„ ์ž…๋ ฅํ• ๋–„ ๊ธ€์ด ๋ณ€ํ•˜๋Š”๊ฒƒ์€ state์„ ๋ฐ”๊ฟˆ
  2. State ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ(mutable)
    3.State ์ด ๋ณ€ํ•˜๋ฉด re-render ๋œ๋‹ค.

๐Ÿ‘‰ React State๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฌผ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. (State๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋žœ๋”๋ง(Re-rendering)๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ State๋Š” ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.


๐ŸŒžReact Hooks๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

React Hooks๋Š” ReactConf 2018์—์„œ ๋ฐœํ‘œ๋œ,
class์—†์ด state๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

โšก๏ธ React Hooks์ด ํ•„์š”ํ•œ ์ด์œ  ?

ํ•ญ์ƒ ๊ธฐ์ˆ ์€ ๊ทธ ์ „์— ๊ฒƒ์˜ ๋ถˆํŽธํ•จ์ด๋‚˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋”์šฑ ๋ฐœ์ „ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ์™€ ๊ฐ™์ด React Hooks๋„ ์ฃผ๋กœ Class Component๋กœ ์‚ฌ์šฉ๋˜์–ด์˜จ React์—์„œ ๋Š๊ปด์™”๋˜ ๋ถˆํŽธํ•จ์ด๋‚˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์›๋ž˜ React๋Š” ์ฃผ๋กœ Class Component๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  React Hooks๋Š” Functional Component๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ๊ทธ ๋ถ€๋ถ„ ๋ถ€ํ„ฐ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ๋‚˜ ์ค‘์š”ํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์‚ฌ์šฉ์„ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๋น ๋ฅด๋”๋ผ๋„ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์จ์™”์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ React 16.8 Hooks ์—…๋ฐ์ดํŠธ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
์ด๋กœ ์ธํ•ด์„œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ 
์ปดํฌ๋„ŒํŠธ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž API๋„ ํ˜ธ์ถœํ•˜๊ณ  ๋งŽ์€ ๋ถ€๋ถ„์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ Hooks์œผ๋กœ ์ธํ•ด ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์†Œ์Šค๋กœ ํ™•์ธ ํ•ด๋ณด์ž๋ฉด...

์™ผ์ชฝ ์ฝ”๋“œ์™€ ์˜ค๋ฅธ์ชฝ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์„ ๋ช…ํ•˜๊ฒŒ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง„ ๊ฑธ ๋ณผ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ์ด์œ ๋Š” Class Component์—์„œ๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ด์šฉํ•  ๋•Œ
componentDidMount ์™€ ComponentDIdUpdate ๊ทธ๋ฆฌ๊ณ  componentWillUnmount ์ด๋ ‡๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€๋งŒ ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” useEffect ์•ˆ์—์„œ ๋‹ค ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Hooks๋กœ ์ธํ•œ ์žฅ์ ์„ ๋” ๋ณด์ž๋ฉด,

HOC ์ปดํฌ๋„ŒํŠธ๋ฅผ Custom React Hooks ๋กœ ๋Œ€์ฒดํ•ด์„œ ๋„ˆ๋ฌด๋‚˜ ๋งŽ์€ Wrapper ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ค„์ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด๋ณผ๊ฒŒ์š”.

๐ŸŒžHOC(Higher Order Component) ๋ž€ ?

ํ™”๋ฉด์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ์ง๋งŒ์„ ๋ถ„๋ฆฌํ•ด์„œ component๋กœ ๋งŒ๋“ค๊ณ , ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ UI์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์€ parameter๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ปดํฌ๋„ŒํŠธ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ์ƒˆ๋กœ์šด ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์œ ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์€ HOC ์ปดํฌ๋„ŒํŠธ์— ๋„ฃ์–ด์ฃผ๊ณ  ๊ทธ HOC ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์ฃผ๋ฉด ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์— ๋”ฐ๋กœ ์ธ์ฆ์„ ์œ„ํ•œ ๋ถ€๋ถ„์€ ๋„ฃ์–ด์ฃผ์ง€ ์•ˆ์•„๋„ ๋ฉ๋‹ˆ๋‹ค. Hooks๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” ์ด ๋ฐฉ๋ฒ•์ด ์ถ”์ฒœ๋˜๋Š” ๋ฐฉ๋ฒ•์ด์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฌธ์ œ๋Š” ๋ฐ”๋กœ ๋„ˆ๋ฌด๋‚˜ ๋งŽ์€ Wrapper ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ๊ธธ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.
์•„๋ž˜์— ๊ทธ๋ฆผ์ฒ˜๋Ÿผ Wrapper๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋ฉด ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ์š”?

๋ฐ”๋กœ Custom React Hooks๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

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