React Hooks ํ›‘์–ด๋ณด๊ธฐ

alswjdยท2025๋…„ 3์›” 19์ผ

React Hooks ํƒํ—˜๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
1/5
post-thumbnail

๐Ÿงพ ์ฐธ๊ณ  ๋ฌธ์„œ :
https://ko.react.dev/reference/react/hooks

  • ๊ฐ Hook์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ

1๏ธโƒฃ Hooks๋ž€?

React Hooks๋Š” ๋ฆฌ์•กํŠธ 16.8 ๋ฒ„์ „์— ์ƒˆ๋กœ ๋„์ž…๋œ ๊ธฐ๋Šฅ์œผ๋กœ,
Class๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ React์˜ ๊ธฐ๋Šฅ๋“ค์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • ํŠนํžˆ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์œ ์šฉํ•˜๊ฒŒ React ๊ธฐ๋Šฅ๋“ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ

2๏ธโƒฃ State Hooks

โœ state๋ž€?

  • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ •๋ณด๋ฅผ "๊ธฐ์–ต"ํ•˜๋„๋ก ๋งŒ๋“  ๋ณ€์ˆ˜
    ex. ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’, ๋ฐฐ์—ด, ์ด๋ฏธ์ง€ ...

๐Ÿ“Œ state hook ์ข…๋ฅ˜

1) useState

  • ์ปดํฌ๋„ŒํŠธ์— state ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” React Hook
  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Hook์œผ๋กœ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ

์‚ฌ์šฉ๋ฒ•

  1. ์„ ์–ธํ•˜๊ธฐ
const [์ƒํƒœ, set์ƒํƒœ] = useState(์ดˆ๊ธฐ๊ฐ’);
  1. ์ƒํƒœ ์—…๋ฐ์ดํŠธ
set์ƒํƒœ(๋ณ€๊ฒฝํ•  ๊ฐ’);
  1. ์ƒํƒœ ๋ณด์—ฌ์ฃผ๊ธฐ
<div>{์ƒํƒœ}</div>

2) useReducer

  • useState์™€ ๊ฐ™์ด ์ƒํƒœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Hook
  • reducer ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ์‚ฌ์šฉํ•˜์—ฌ state ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•จ
    => ์ข€ ๋” ๊ตฌ์กฐํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ, ํ˜น์€ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ(ex. ๊ฐ์ฒด ๋ฐฐ์—ด)์„ ๊ด€๋ฆฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ

์‚ฌ์šฉ๋ฒ•

  1. ์„ ์–ธํ•˜๊ธฐ
const [์ƒํƒœ, dispatchํ•จ์ˆ˜] = useReducer(reducerํ•จ์ˆ˜, ์ดˆ๊ธฐ์ƒํƒœ);
// dispatchํ•จ์ˆ˜ : ์ƒํƒœ(state) ๋ณ€๊ฒฝ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
// reducerํ•จ์ˆ˜ : dispatch ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒํƒœ(state)๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
  1. reducer ํ•จ์ˆ˜ (=์ƒํƒœ ๋ณ€๊ฒฝ, ๊ด€๋ฆฌ ํ•จ์ˆ˜) ๋งŒ๋“ค๊ธฐ
  • ์ปดํฌ๋„ŒํŠธ ๋ฐ”๊นฅ์—์„œ ์‚ฌ์šฉ
function reducer(์ƒํƒœ, ์•ก์…˜๊ฐ์ฒด) {
}
// ์•ก์…˜๊ฐ์ฒด: ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์ •๋ณด (dispatch ์ธ์ž๊ฐ’) 
// ์ฆ‰, ์ƒํƒœ๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ๋ณ€๊ฒฝํ• ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ

3๏ธโƒฃ Context Hooks

โœ context๋ž€?

  • (์‰ฝ๊ฒŒ ๋งํ•ด์„œ) ์ „์—ญ ์ƒํƒœ.
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ Props๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

๐Ÿ“Œ context hook ์ข…๋ฅ˜

useContext

  • context๋ฅผ ์ฝ๊ณ  ๊ตฌ๋…ํ•˜๋Š” Hook

์‚ฌ์šฉ๋ฒ•

  1. ์ƒˆ๋กœ์šด context ๋งŒ๋“ค๊ธฐ
const SomeContext = createContext(๊ธฐ๋ณธ์ƒํƒœ);
  1. context ๊ฐ€์ ธ์˜ค๊ธฐ
const value = useContext(SomeContext);

4๏ธโƒฃ Ref Hooks

โœ ref๋ž€?

  • "reference"์˜ ์ค€๋ง
  • ref๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ์ •๋ณด ๋ณด์œ  ๊ฐ€๋Šฅ (ex. DOM, timeout ID ๋“ฑ)
    • state์™€ ๋‹ฌ๋ฆฌ, ref๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Œ

๐Ÿ“Œ ref hooks ์ข…๋ฅ˜

useRef

  • ref๋ฅผ ์„ ์–ธํ•˜๋Š” Hook

์‚ฌ์šฉ๋ฒ•

  1. ref ์„ ์–ธ
const ref = useRef(0);
  1. ref ๊ฐ€์ ธ์˜ค๊ธฐ
  • ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•  ๊ฒฝ์šฐ ref๊ฐ์ฒด ์•ˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ,
{current: 0}
  • ref.current๋กœ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

5๏ธโƒฃ Effect Hooks

โœ Effect๋ž€?

  • Side Effect๋ฅผ ๋œปํ•จ
  • ์ฆ‰, ์™ธ๋ถ€ ์„ธ๊ณ„์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋ฐœ์ƒํ•˜๋Š”, ์˜ˆ์ธก์ด ์–ด๋ ค์šด ๊ฒฐ๊ณผ
    • ex1. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์š”์ฒญ
    • ex2. document๋‚˜ window์™€ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € API์™€์˜ ์ƒํ˜ธ์ž‘์šฉ
    • ex3. setTimeout ๋˜๋Š” setInterval๊ณผ ๊ฐ™์€ ํƒ€์ด๋ฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ
  • (๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ, ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜)

๐Ÿ“Œ effect hooks ์ข…๋ฅ˜

useEffect

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

์‚ฌ์šฉ๋ฒ•

useEffect(() => {
  // ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ๋กœ์ง (์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๋กœ์ง)

  return () => {
    // ํด๋ฆฐ์—… ๋กœ์ง (์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์ข…๋ฃŒํ•˜๋Š” ๋กœ์ง)
  };
}, [์˜์กด์„ฑ๋ฐฐ์—ด]);
// ์˜์กด์„ฑ๋ฐฐ์—ด์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค useEffect ์‹คํ–‰

6๏ธโƒฃ Performance Hooks

โœ Performance(์„ฑ๋Šฅ) ์ตœ์ ํ™”๋ž€?

  • ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์—ฌ์„œ ์ž์›์„ ์ ˆ์•ฝํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ณผ์ •
    • ๋ฆฌ๋ Œ๋”๋ง์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•จ!

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ๊ฒฝ์šฐ

  • ๋ถ€๋ชจ์—์„œ ์ „๋‹ฌ๋ฐ›์€ props๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ
  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ
  • ์ž์‹ ์˜ state๊ฐ€ ๋ณ€๊ฒฝ ๋  ๋•Œ

๐Ÿ“Œ performance hooks ์ข…๋ฅ˜

1) useMemo

  • ๊ฐ’์„ ๊ธฐ์–ต(memoization)ํ•˜์—ฌ, ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ํ•ด์ฃผ๋Š” Hook

์‚ฌ์šฉ๋ฒ•

const cachedValue = useMemo(๊ณ„์‚ฐํ• ํ•จ์ˆ˜, [์˜์กด์„ฑ๋ฐฐ์—ด]);

2) useCallback

  • ํ•จ์ˆ˜๋ฅผ ๊ธฐ์–ต(memoization)ํ•˜์—ฌ, ์˜์กด์„ฑ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•œ ํ•จ์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” Hook

์‚ฌ์šฉ๋ฒ•

const cachedFn = useCallback(๊ณ„์‚ฐํ• ํ•จ์ˆ˜, [์˜์กด์„ฑ๋ฐฐ์—ด]);
profile
์™€์šฐ ํ”„๋ก ํŠธ์—”๋“œ

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