๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‘Library/โš› Redux

Redux(๋ฆฌ๋•์Šค)๋ž€?

by ๋…น์ฐจ๋ง›๊ฐœ๊ตฌ๋ฆฌ 2022. 12. 8.

Redux(๋ฆฌ๋•์Šค)๋ž€?

๋ฆฌ๋•์Šค๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

์šฐ์„  ๋ฆฌ๋•์Šค๋Š” ๋ฆฌ์•กํŠธ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ฉฐ ์ˆœ์ˆ˜ HTML, JAVASCRIPT ๋‚ด์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ปดํฌ๋„ŒํŠธ์— ์ง‘์ค‘๋œ ๋ฆฌ์•กํŠธ์™€ ์‹œ๋„ˆ์ง€๊ฐ€ ์ข‹์œผ๋‹ˆ ๋Œ€์ฒด์ ์œผ๋กœ ๋ฆฌ์•กํŠธ์— ๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋ฟ์ด๋‹ค.

 

Redux์˜ ๊ธฐ๋ณธ ๊ฐœ๋… : ์„ธ ๊ฐ€์ง€ ์›์น™

Single source of truth

  • ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ณณ์—์„œ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.
  • ์ฆ‰, ์Šคํ† ์–ด๋ผ๋Š” ํ•˜๋‚˜๋ฟ์ธ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

State is read-only

  • ๋ฆฌ์•กํŠธ์—์„œ๋Š” setState ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด์•ผ๋งŒ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฆฌ๋•์Šค์—์„œ๋„ ์•ก์…˜์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Changes are made with pure functions

  • ๋ณ€๊ฒฝ์€ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฆฌ๋“€์„œ์™€ ์—ฐ๊ด€๋˜๋Š” ๊ฐœ๋…์ด๋‹ค.
  • Store(์Šคํ† ์–ด) – Action(์•ก์…˜) – Reducer(๋ฆฌ๋“€์„œ)

 

 

 


Store, Action, Reducer์˜ ์˜๋ฏธ์™€ ํŠน์ง•

Action (์•ก์…˜)

0๏ธโƒฃ Action(์•ก์…˜)์€ ์•ฑ์—์„œ ์Šคํ† ์–ด์— ์šด๋ฐ˜ํ•  ๋ฐ์ดํ„ฐ์™€ ํ–‰๋™์˜ ๋ช…์„ธ์„œ(์ด๋ฆ„)๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค.
1๏ธโƒฃ Action(์•ก์…˜)์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ˜•์‹์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.

  • Simple JavaScript Object
{
    type: "INCREASE",
    
},
// or 
{
    type: 'ADD_TODO', // ํ•„์ˆ˜
    payload: { // ์˜ต์…˜
    todo: '๋นจ๋ž˜ํ•˜๊ธฐ',
	}
}

type์€ ๋‹จ์ˆœํžˆ ์–ด๋–ค ๋™์ž‘์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์„ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์ง€์ •ํ•œ ์ปค์Šคํ…€ ์ด๋ฆ„ํ‘œ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜๋Š” INCREASE ( ์ฆ๊ฐ€ํ•˜๋‹ค )๋ผ๊ณ  ์ด๋ฆ„ํ‘œ๋ฅผ ๋ถ™์ธ ๋ช…๋ น์€ ๊ฐ’์„ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ช…๋ น์œผ๋กœ

์‹๋ณ„ ํ•˜๊ฒ ๋‹ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

Reducer (๋ฆฌ๋“€์„œ)

0๏ธโƒฃ Action(์•ก์…˜)์„ Reducer(๋ฆฌ๋“€์„œ)์— ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.
1๏ธโƒฃ Reducer(๋ฆฌ๋“€์„œ)๊ฐ€ ์•ก์…˜์—์„œ์˜จ ์ด๋ฆ„ํ‘œ๋ฅผ ๋ณด๊ณ  ์ •ํ•ด์ง„ ๋ช…๋ น์„ ํ†ตํ•ด Store(์Šคํ† ์–ด)์˜ ์ƒํƒœ๋ฅผ
      ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
2๏ธโƒฃ Action(์•ก์…˜)์„ Reducer(๋ฆฌ๋“€์„œ)์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” dispatch() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
const initialState = {
  todo:"",
  count:0,
}

function reducer(state = initialState, action) {
    switch(action.type) {
        case 'INCREASE':
            return {
            	..state,
                count:count + 1;
            }
        case 'LOG_IN_REQUEST':
            return {
            	..state,
                todo:action.payload.todo;
            }
        default:
            return state;
    }
}

์œ„์™€ ๊ฐ™์ด ์•ก์…˜์—์„œ ๋ถ™์—ฌ๋…ผ ์ด๋ฆ„ํ‘œ์—๋”ฐ๋ผ case๋ฌธ์„ ํ†ตํ•ด ์„ค์ •๋œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

 

 

Store (์Šคํ† ์–ด)

Store(์Šคํ† ์–ด)๋Š” ์ƒํƒœ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์ด๋‹ค.

๋ฆฌ๋•์Šค์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)์ด๋‹ค.

์ด ์•ˆ์— ํ˜„์žฌ ์ƒํƒœ(state[data])๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์•ก์…˜๊ฐ’์„ ๋ฐ›์€ ๋””์ŠคํŒจ์น˜ํ•จ์ˆ˜๊ฐ€ ๋ฆฌ๋“€์„œ๋กœ ์ „๋‹ฌํ•œ ์ƒํƒœ๊ฐ’์„

์ €์žฅํ•˜๋Š” ๊ณณ์ด๋‹ค. ( ๋ฆฌ์•กํŠธํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” state์˜ ์ค‘์•™ ์ €์žฅ์†Œ )

 


 

๐Ÿ“š์ฐธ๊ณ 
https://mjn5027.tistory.com/33
https://hanamon.kr/redux๋ž€-๋ฆฌ๋•์Šค-์ƒํƒœ-๊ด€๋ฆฌ-๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/

 

728x90

'๐Ÿ“‘Library > โš› Redux' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?  (0) 2022.12.07