ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

react์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” redux.

redux๊ฐ€ ๋ฌด์—‡์ธ์ง€, ํฐ ํ๋ฆ„์€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.

 

redux๋ž€?

 

๐Ÿ“์‚ฌ์šฉ ์ด์œ 

  • useState์˜ ๋ถˆํŽธํ•จ
    • props๋ฅผ ํ†ตํ•ด์„œ ๋‹จ๋ฐฉํ–ฅ(๋ถ€๋ชจ -> ์ž์‹)์œผ๋กœ์˜ state ์ „๋‹ฌ๋งŒ ๊ฐ€๋Šฅ
    • ์กฐ๋ถ€๋ชจ -> ์ž์‹ ์‚ฌ์ด์— ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•จ.

 

๐Ÿ“์ •์˜

  • “์ค‘์•™ state ๊ด€๋ฆฌ์†Œ”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํŒจํ‚ค์ง€(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
  • ์ปดํฌ๋„ŒํŠธ ๋ฐ–์—์„œ ๋”ฐ๋กœ ์ƒ์„ฑ
  • ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜ ์ƒ๊ด€์—†์ด state ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Context API ๋ณด๋‹ค ๊ทœ๋ชจ๊ฐ€ ํฐ state์—์„œ ์œ ์šฉ

 

 

counter ์•ฑ ์„ธํŒ…

 

ํฌ๊ฒŒ ๋„ค ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

1. ๋ฆฌ๋•์Šค ์„ค์ •
   1-1. ๋ฆฌ๋•์Šค ์„ค์น˜
   1-2. ํด๋” ๊ตฌ์กฐ ์ƒ์„ฑ
2. ์„ค์ •์ฝ”๋“œ ์ž‘์„ฑ
   2-1. configStore.js
   2-2. store ์ฃผ์ž…(main.jsx)
3. ๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ
   3-1.  reducer ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ
   3-2. ๋ชจ๋“ˆ์˜ ๊ตฌ์„ฑ์š”์†Œ
   3-3. ์นด์šดํ„ฐ ๋ชจ๋“ˆ์„ store์— ์—ฐ๊ฒฐ
4. store์™€ ๋ชจ๋“ˆ ์—ฐ๊ฒฐ ํ™•์ธ

 

 

1. ๋ฆฌ๋•์Šค ์„ค์ •

 

๐Ÿ“1-1. ๋ฆฌ๋•์Šค ์„ค์น˜

๊ธฐ์กด react vite ์„ค์น˜ ๋ฐฉ๋ฒ•

๋”๋ณด๊ธฐ

[ํ„ฐ๋ฏธ๋„]

yarn create vite ํ”„๋กœ์ ํŠธ๋ช… --template react

 

+ redux ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

yarn add redux react-redux

# ์•„๋ž˜์™€ ๊ฐ™์€ ์˜๋ฏธ
yarn add redux
yarn add react-redux

 

 

๐Ÿ“1-2. ํด๋” ๊ตฌ์กฐ ์ƒ์„ฑ

 

  • src
    • redux
      • config (์ค‘์•™ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์†Œ:store)
        • configStore.js
      • modules(state๋“ค์˜ ๊ทธ๋ฃน)
        • counter.js

 

 

 

2. ์„ค์ • ์ฝ”๋“œ ์ž‘์„ฑ

 

๐Ÿ“2-1. configStore.js ์—์„œ store ๋งŒ๋“ค๊ธฐ

  1. combineReducers() : rootReducer ๋งŒ๋“ค๊ธฐ
  2. createStore() : store๋ฅผ ๋งŒ๋“œ๋Š” ๋ฉ”์†Œ๋“œ(ํ•จ์ˆ˜) 
  3. store export
import { createStore } from "redux";
import { combineReducers } from "redux";

const rootReducer = combineReducers({}); 
const store = createStore(rootReducer); 

export default store;

 

 

๐Ÿ“2-2. main.jsx์— store ์ฃผ์ž…ํ•˜๊ธฐ

  • App์„ Provider๋กœ ๊ฐ์‹ธ์„œ ์ด ์˜์—ญ ๋‚ด์—์„œ๋Š” store๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์œ„์—์„œ ๋งŒ๋“  store ์ฃผ์ž…
 <Provider store={store}> 
    <App />
  </Provider>

 

 

 

3. ๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ

๋ฆฌ๋•์Šค๋ฅผ ํ†ตํ•ด ์นด์šดํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค.

 

๐Ÿ“3-1. reducer ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

  • input์—๋Š” state = ์ดˆ๊ธฐ๊ฐ’, action
  • ๋กœ์ง์—๋Š” switch๋ฌธ (key: action.type, state ์ž์ฒด๋ฅผ return)
// src/redux/modules/counter.js

// ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’
const initialState = {
  number: 0,
};

// ๋ฆฌ๋“€์„œ
const counter = (state = initialState, action) => {
  switch (action.type) {
    default:
      return state;
  }
};

// ๋ชจ๋“ˆํŒŒ์ผ์—์„œ๋Š” ๋ฆฌ๋“€์„œ๋ฅผ export default ํ•œ๋‹ค.
export default counter;

 

 

๐Ÿ“3-2. ๋ชจ๋“ˆ์˜ ๊ตฌ์„ฑ์š”์†Œ

  • initialState === ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’ 
    • ๊ฐ์ฒด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์Œ
    • ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์€ ๊ฐ์ฒด ์™ธ์—๋„ ๋ฐฐ์—ด, ์›์‹œ๋ฐ์ดํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
// ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’
const initialState = {
  number: 0,
};

 

 

  • Reducer === ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜
    • reducer๋Š” ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜๋‹ค.(= useState์—์„œ setState์˜ ์—ญํ• )
    • state์— ์ดˆ๊ธฐ๊ฐ’์„ ํ• ๋‹นํ•ด์•ผ ํ•จ
// ๋ฆฌ๋“€์„œ 
const counter = (state = initialState, action) => {
  switch (action.type) {
    default:
      return state;
  }
};

 

 

 

๐Ÿ“3-3. ์นด์šดํ„ฐ ๋ชจ๋“ˆ์„ store์— ์—ฐ๊ฒฐ

  • configStore.js ๋กœ ์ด๋™ํ•˜์—ฌ ์ฝ”๋“œ ์ถ”๊ฐ€(2-1 ๋กœ์ง ์ฐธ๊ณ )
// src/redux/config/configStore.js


// ์›๋ž˜ ์žˆ๋˜ ์ฝ”๋“œ
import { createStore } from "redux";
import { combineReducers } from "redux";

// ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ ๋ถ€๋ถ„
import counter from "../modules/counter";

const rootReducer = combineReducers({
  counter: counter, // <-- ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ ๋ถ€๋ถ„
});
const store = createStore(rootReducer);

export default store;

 

 

 

4. store์™€ ๋ชจ๋“ˆ ์—ฐ๊ฒฐ ํ™•์ธ

 

  • App.jsx ์ปดํฌ๋„ŒํŠธ์—์„œ useSelector ํ›… ์‚ฌ์šฉํ•˜๊ธฐ
// 1. store์—์„œ ๊บผ๋‚ธ ๊ฐ’์„ ํ• ๋‹น ํ•  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ
const number = 

// 2. useSelector()๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹น
const number = useSelector() 

// 3. useSelector์˜ ์ธ์ž์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ
const number = useSelector( ()=>{} )

// 4. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ์ธ์ž์—์„œ ๊ฐ’์„ ๊บผ๋‚ด return
// useSelector๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ˆ, state๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์ฝ˜์†”๋กœ ํ™•์ธํ•˜๊ธฐ!
const number = useSelector((state) => {
	console.log(state)
	return state
});

 

 

 


configStore.js์—์„œ store๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,

main.jsx์— store๋ฅผ ์ฃผ์ž…ํ•˜๊ณ ,

module์„ ๋งŒ๋“ค๋ฉฐ reducer ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋งŒ๋“  reducer์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ช…๋ น์„ ์ „๋‹ฌํ•  ์ง€,

reducer๋Š” ๋ฐ›์€ ๋ช…๋ น์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ง€์— ์ง‘์ค‘ํ•˜์—ฌ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•œ๋‹ค.

 

๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ