Front-End/React

React] Hook : useReducer

์™•๊ฐ€๐Ÿ‘ 2023. 6. 22. 16:25
728x90
๋ฐ˜์‘ํ˜•

useReducer

๋‹จ์ˆœํžˆ state ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

state๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ๋กœ์ง, ํ•จ์ˆ˜ ๋“ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿด ๋•Œ useReducer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๋ฆฌ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด state๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const [state, dispatch] = useReducer(reducer, initialState);

 

ํ•˜๋‚˜์˜ state์— dispatch๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋ณ€ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค.

(dispatch๊ฐ€ setState์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋  ๋“ฏ์‹ถ์Šต๋‹ˆ๋‹ค.)

 

  • state : ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ state
  • dispatch: action์„ ๋ฐœ์ƒํ•˜๋Š” ํ•จ์ˆ˜ (setState์™€ ๋น„์Šท)
  • reducer : reducer ์ •์˜
  • initialState : ์ดˆ๊ธฐ๊ฐ’

 

 


 

 

reducer

function reducer(state, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  }
}

// state = state + 1; ๋Œ€์ž…๊ธˆ์ง€

 

๋ฐ˜๋“œ์‹œ switch๋กœ ์‚ฌ์šฉํ•ด์•ผ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

case๋ณ„ action์€ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

state๋Š” ์ฝ๊ธฐ ์ „์šฉ์ž„์œผ๋กœ ๊ฐ•์ œ๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ํ–‰์œ„๋Š” ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

 

 


 

 

dispatch

 const onIncrease = () => {
    dispatch({ type: 'INCREMENT' });
  };

 

type๊ทœ์น™์— ๋”ฐ๋ผ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

switch์˜ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋  ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 


 

 

์˜ˆ

 

+1 ๋˜๋Š” -1 ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ ,

๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ dispatch๋ฅผ ํ†ตํ•ด reducer์— ์ •์˜๋œ action์ด ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค,

 

 


 

 

useState์™€ useReducer ๋น„๊ต

useState

 

useReducer

 

์œ„์—์„œ ์˜ˆ๋กœ ๋“ค์—ˆ๋˜ ์†Œ์Šค๋ฅผ useState๋กœ ๋ฐ”๊ฟ”์„œ ๋น„๊ตํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

useReducer๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด useState๋กœ๋„ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ๋ฐ˜๋Œ€๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 


 

 

๊ฐœ๋ฐœ์ž ํŒ๋‹จํ•˜์— ์–ด๋–ค state์— ์–ด๋–ค hook์„ ์‚ฌ์šฉํ• ์ง€ ์ •ํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋•Œ๊ทธ๋•Œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—...
๋‘˜ ๋‹ค ์‚ฌ์šฉํ•ด ๋ณด๊ณ , ๋ณธ์ธ์—๊ฒŒ ๋งž๊ฑฐ๋‚˜ ์ฝ”๋“œ ๊ด€๋ฆฌ ์ฐจ์›, ๊ฐ€๋…์„ฑ์„ ๋ณด๋ฉด์„œ ์ •ํ•˜๋ฉด ๋  ๋“ฏ์‹ถ์Šต๋‹ˆ๋‹ค.

 

 

2023.06.06 - [Front-End/React] - Hook) useState
728x90

'Front-End > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React] Hook : useContext  (0) 2023.06.23
React] Hook : useState ๋น„๋™๊ธฐ โ†’ ๋™๊ธฐ ํ•˜๋Š” ๋ฒ•  (0) 2023.06.22
React] Hook : useCallback  (0) 2023.06.22
React] Hook : useMemo  (0) 2023.06.20
React] Hook : useRef  (0) 2023.06.20