useReducer

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • useReducer

๐Ÿ“– useReducer

  • useReducer๋Š” ์ปดํฌ๋„ŒํŠธ์— reducer๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” React Hook

  • reducer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • ์ฃผ๋กœ useState๋ณด๋‹ค ๋ณต์žกํ•œ ์ƒํƒœ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ State ๊ด€๋ฆฌ ๋กœ์ง ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ

๐Ÿค– useReducer ์‚ฌ์šฉ๋ฒ•

const [state, dispatch] = useReducer(reducer, initialArg, init?)
import { useReducer } from 'react';

function reducer(state, action) {
  // ...
}

function MyComponent() {
  const [state, dispatch] = useReducer(reducer, { age: 42 });
  // ...
}

Parameter

  • reducer ํ•จ์ˆ˜ : ์ƒํƒœ๊ฐ€ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ๋ฅผ ํ• ์ง€๋ฅผ ๋ช…์‹œํ•ด๋‘” ํ•จ์ˆ˜.

    • ์ˆœ์ˆ˜ํ•จ์ˆ˜

    • ์ธ์ž๋กœ state, Action์„ ์ „๋‹ฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ƒํ…Œ(state)๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • initialArg : ์ดˆ๊ธฐ๊ฐ’

    • ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ init ์ธ์ž์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

  • init(์„ ํƒ์‚ฌํ•ญ) : ์ดˆ๊ธฐ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜

    • ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ดˆ๊ธฐ ๊ฐ’์€ initialArg ๊ฐ’์œผ๋กœ ์„ค์ •๋œ๋‹ค.

    • ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ดˆ๊ธฐ๊ฐ’์€ init(initialArg)๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋กœ ์„ค์ •๋œ๋‹ค.

reducer ํ•จ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ ํ•ด์•ผํ•œ๋‹ค.

function reducer(state, action) {
  switch(action.type){
    case 'Action.Type' : {
      return {...state, name:'New Name'} // ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด state์˜ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€
    }
  }
}

Returns

  • useReducer๋Š” ๋‘ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    • state : ์ฒซ ๋ฒˆ์งธ ๋ Œ๋” ์ค‘ init(initialArg) ๋˜๋Š” initialArg๋กœ ์„ค์ •

    • dispatch ํ•จ์ˆ˜ : ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žฌ๋ Œ๋”๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ•จ์ˆ˜ (์ƒํƒœ๋ณ€ํ™”๋ฅผ ๋ฐœ๋™์‹œํ‚ค๋Š” ํŠธ๋ฆฌ๊ฑฐ ์—ญํ™œ)

      • ์ธ์ž๋กœ Action ์ „๋‹ฌ

dispatch ํ•จ์ˆ˜ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žฌ๋ Œ๋”๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. dispatch ํ•จ์ˆ˜์˜ ์œ ์ผํ•œ ์ธ์ž๋กœ ์•ก์…˜์„ ์ „๋‹ฌํ•œ๋‹ค.

const [state, dispatch] = useReducer(reducer, { age: 42 });

function handleClick() {
  dispatch({ type: 'incremented_age' });
  // ...

๐Ÿ”— ์ฐธ๊ณ 

Last updated