React Hooks

Yejiยท2023๋…„ 10์›” 13์ผ
0

๐Ÿ”– Before start

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ž˜์Šคํ˜•๊ณผ ํ•จ์ˆ˜ํ˜•์ด ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋”ฐ๋ผ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฆฌ์•กํŠธ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ, ๊ทธ๋ฆฌ๊ณ  ํ›…์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

1. ๋ฆฌ์•กํŠธ ์ƒ๋ช…์ฃผ๊ธฐ (React LifeCycle)

๋ชจ๋“  ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

1. ๋งˆ์šดํŠธ(mount) : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ์ถ”๊ฐ€๋  ๋•Œ
2. ์—…๋ฐ์ดํŠธ(update): props ํ˜น์€ state์ด ๋ณ€๊ฒฝ๋˜์–ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ์ƒˆ๋กœ ๊ทธ๋ ค์งˆ ๋•Œ
3. ์–ธ๋งˆ์šดํŠธ(unmount) : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์ œ๊ฑฐ๋  ๋•Œ

๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌ๋ Œ๋”๋ง(update)๋˜๋Š” ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. props ๊ฐ’์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ
2. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ
3. state ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ
------------------------
4. ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ shouldComponentUpdate()๊ฐ€ true๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ
5. ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ forceUpdate() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ

2. ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ (LifeCycle Method)

๋ฆฌ์•กํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ ํ›…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์•Œ์•„๋ณด๊ณ  ๋„˜์–ด๊ฐ€์ž.

1๏ธโƒฃ ๋งˆ์šดํŠธ

  1. constructor()
  • ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ๋กœ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
  1. getDerivedStateFromProps()
  • props๋กœ ๋ฐ›์•„์˜จ ๊ฒƒ์„ state์— ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒซ ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๊ณ , ๋ฆฌ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „์—๋„ ํ˜ธ์ถœ๋œ๋‹ค.
  1. render()
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.
  1. componentDidMount()
  • ์ปดํฌ๋„ŒํŠธ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ์ƒํƒœ๋กœ, AJAX ์š”์ฒญ์„ ํ•˜๊ฑฐ๋‚˜ DOM์˜ ์†์„ฑ์„ ์ฝ์–ด ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

2๏ธโƒฃ ์—…๋ฐ์ดํŠธ

  1. getDerivedStateFromProps()

  2. shouldComponentUpdate()

  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋ ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์ตœ์ ํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, React.memo์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
  1. render()

  2. getSnapshotBeforeUpdate()

  • ์ปดํฌ๋„ŒํŠธ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์ „์˜ DOM ์ƒํƒœ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ + ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•„์ง ์—†๋‹ค.
DOM์— ๋ณ€ํ™”๊ฐ€ ๋ฐ˜์˜๋˜๊ธฐ ์ด์ „ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์ž.
  1. componentDidUpdate()
  • ๋ฆฌ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋˜์–ด ํ™”๋ฉด์— ๋ณ€ํ™”๊ฐ€ ๋ชจ๋‘ ๋ฐ˜์˜๋˜๊ณ  ๋‚˜์„œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ getSnapshotBeforeUpdate() ์—์„œ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

3๏ธโƒฃ ์–ธ๋งˆ์šดํŠธ

  1. componentWillUnmount()
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋œ๋‹ค.

3. ๋ฆฌ์•กํŠธ ํ›… (React Hooks)

๋ฆฌ์•กํŠธ ํ›…์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ ํ›… ๊ฐœ๋…์ด ํƒ„์ƒํ•˜๊ฒŒ๋œ ๋ฐฐ๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ˜๋ณต๋˜๋Š” ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

๊ธฐ์กด ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” render props๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์› ๊ณ ,
์ถ”์ƒ์ ์ธ ๋ ˆ์ด์–ด๊ฐ€ ๊ฒน๊ฒน์ด ์Œ“์—ฌ ๋งŒ๋“ค์–ด์ง„ wrapper hell์„ ํ˜•์„ฑํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.

โžก๏ธ ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต๊ณผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์—†์ด ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ ๋ณต์žกํ•œ ๊ตฌ์กฐ์˜ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๋กœ์ง์„ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค.

์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ์„œ๋กœ ๊ด€๊ณ„ ์—†๋Š” ๋กœ์ง์„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด,
1. componentDidMount์™€ componentDidUpdate์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋™์ผํ•œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
2. componentDidMount๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ ๊ด€๋ จ ์—†๋Š” ๋กœ์ง์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.
3. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋กœ์ง์€ componentWillUnmount์— ๋“ค์–ด๊ฐ„๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๊ด€๋ จ์„ฑ ์žˆ๋Š” ๋กœ์ง์€ ์„œ๋กœ ํฉ์–ด์ง€๊ณ ,
๊ด€๋ จ ์—†๋Š” ๋กœ์ง์€ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง€๋ฉฐ ๋ฒ„๊ทธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์•„์กŒ๋‹ค.

โžก๏ธ ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ํ˜น์€ ๋ฐ์ดํ„ฐ ํŒจ์นญ๊ณผ ๊ฐ™์ด ์—ฐ๊ด€์„ฑ์žˆ๋Š” ๋กœ์ง์„ ๋‚˜๋ˆ  ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ ์–ด๋ ค์šด ํด๋ž˜์Šค ๊ฐœ๋…

๊ฐœ๋ฐœ์ž๋Š” ๋ฆฌ์•กํŠธ์˜ props, state, ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ž˜ ์ดํ•ดํ•˜์ง€๋งŒ ํด๋ž˜์Šค๋ž€ ๊ฐœ๋…์€ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์–ดํ–ˆ๋‹ค.
์‹ฌ์ง€์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ this๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ this์™€ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๋„ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค๋ฃจ๊ธฐ ๊นŒ๋‹ค๋กœ์› ๋‹ค.

โžก๏ธ ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฆฌ์•กํŠธ ์ž์ฒด์˜ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
์ฑ„์›Œ๋‚˜๊ฐ€๋Š” ๊ณผ์ •

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด