๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TIL/๐Ÿงบ React

์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ "React Hooks"

Hooks ๋“ฑ์žฅํ•˜๊ธฐ ์ „

์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ ค๋ฉด ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ๋‹ค.

this.state ํ•„๋“œ์— ์ด๋ฆ„์„ ์ €์žฅํ•œ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ด ๊ฐ’์ด ๊ฐฑ์‹ ๋˜๊ณ  ๋‹ค์‹œ ํ™”๋ฉด์— ๋ฐ˜์˜ํ•˜๋Š” Class ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ ๋ฐฉ์‹์ด์˜€๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๋„๋ก Hooks๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

Hooks๋ž€ ?


๋ฆฌ์•กํŠธ v16.8 ์— ์ƒˆ๋กœ ๋„์ž…๋œ ๊ธฐ๋Šฅ์œผ๋กœ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ state์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๊ธฐ๋Šฅ์„ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

์‰ฝ๊ฒŒ ๋งํ•ด, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ฐ’ ๋ฐ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

 

๊ธฐ์กด ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ ๋กœ์ง ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ์ž˜๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ state์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋งŒ์ผ ์•ฑ์„ react hook์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ ๋‹ค๋ฉด class component, render ๋“ฑ์„ ์•ˆํ•ด๋„ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

  • class ์•ˆ์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ class ์—†์ด ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

→ ๋ชจ๋“  ๊ฒƒ์€ ํ•˜๋‚˜์˜ function์ด ๋˜๋Š” ๊ฒƒ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ

 

 

๊ธฐ๋Šฅ

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” useState
  • ๋ Œ๋”๋ง ์งํ›„ ์ž‘์—…์„ ์„ค์ •ํ•˜๋Š” useEffect ๋“ฑ

→ ๊ธฐ์กด์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

 

์ฃผ์˜์‚ฌํ•ญ

  • Hook ์‚ฌ์šฉ ์‹œ์— ์ตœ์ƒ์œ„(๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜ x)์—์„œ ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ Hook์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ๋™์ผํ•œ ์ˆœ์„œ๋กœ Hook์ด ํ˜ธ์ถœ๋˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

useState


ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ๊ฐ€๋ณ€์ ์ธ ์ƒํƒœ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Hook

  • state๋ฅผ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉ
  • ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜๊ธฐ
    • ํ•˜๋‚˜์˜ useState ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ์ƒํƒœ๊ฐ’๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์ƒํƒœ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋„ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 

useEffect


๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋Š” Hook

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ componentDidMount ์™€ componentDidUpdate ๋ฅผ ํ•ฉ์นœ ํ˜•ํƒœ๋กœ ๋ณด์•„๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

  • ๋งˆ์šดํŠธ ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ํŠน์ • ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋˜๊ธฐ ์ „์ด๋‚˜, ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์ง์ „์— ์–ด๋– ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด useEffect ์—์„œ ๋’ท์ •๋ฆฌ(cleanup) ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

 

 

 

useReducer


useState ๋ณด๋‹ค ์ปดํฌ๋„ŒํŠธ์—์„œ ๋” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Hook

Reducer

  • ํ˜„์žฌ ์ƒํƒœ์™€, ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์•ก์…˜(action) ๊ฐ’์„ ์ „๋‹ฌ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜์—์„œ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๊ผญ ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

useMemo


ํŠน์ • ๊ฐ’ ์žฌ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Hook (= ๋ฆฌํ„ด๊ฐ’ ์žฌ์‚ฌ์šฉ)

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
    • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ: ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ๋œป
    • ์ฆ‰, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋ชจ๋“  ๋‚ด๋ถ€ ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋œ๋‹ค
      • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๋ฐ”๋€Œ์–ด๋„ ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์ด ๋‹ค์‹œ ์ด๋ฃจ์–ด์ง
  • ๋ณต์žกํ•œ ์—ฐ์‚ฐ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ  React์•ฑ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

 

 

 

useCallback


ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•˜๋Š” Hook (= ํ•จ์ˆ˜ ์žฌ์‚ฌ์šฉ)

  • ์ฃผ๋กœ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

useContext


ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ Context ๋ฅผ ๋ณด๋‹ค ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

 

 

useRef


ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ref ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

 

 

 

 

์ฐธ๊ณ ๋ฌธํ—Œ

'TIL > ๐Ÿงบ React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๊ฐ€์ƒ๋”(Virtual DOM) ์ดํ•ดํ•˜๊ธฐ  (0) 2023.01.04