๐Ÿ“– TIL - "Props Drilling ์ง€์˜ฅ์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ" - Redux ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๐ŸŽฏ

์Š˜ยท2025๋…„ 1์›” 29์ผ

๐Ÿ“– TIL

๋ชฉ๋ก ๋ณด๊ธฐ
40/90

๐Ÿ“Œ ์˜ค๋Š˜์˜ ํ•™์Šต

Redux๋ฅผ ํ†ตํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ, ๊ธฐ๋ณธ ๊ฐœ๋…, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•๊นŒ์ง€ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ฐœ๋… ์ •๋ฆฌ

1. Redux์˜ ํ•„์š”์„ฑ

  • Local State์˜ ํ•œ๊ณ„

    • Props Drilling ๋ฌธ์ œ
    • ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์–ด๋ ค์›€
    • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ™์€ ์ƒํƒœ ๊ณต์œ  ์‹œ ๋ณต์žก๋„ ์ฆ๊ฐ€
  • Global State์˜ ์žฅ์ 

    • ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ
    • ์ปดํฌ๋„ŒํŠธ ์œ„์น˜์™€ ๊ด€๊ณ„์—†์ด ์ƒํƒœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ๋ณ€ํ™”

2. Redux์˜ ๋™์ž‘ ์›๋ฆฌ

// Store ์„ค์ •
import { createStore } from 'redux';
import { Provider } from 'react-redux';

const store = createStore(rootReducer);

// Provider๋กœ ์•ฑ ๊ฐ์‹ธ๊ธฐ
<Provider store={store}>
  <App />
</Provider>

// ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ์‚ฌ์šฉ
const number = useSelector(state => state.counter.number);
const dispatch = useDispatch();

3. Action๊ณผ Reducer

// Action Types
const ADD_NUMBER = "ADD_NUMBER";
const MINUS_NUMBER = "MINUS_NUMBER";

// Action Creators
export const addNumber = (payload) => ({
  type: ADD_NUMBER,
  payload,
});

// Reducer
const counter = (state = initialState, action) => {
  switch (action.type) {
    case ADD_NUMBER:
      return {
        number: state.number + action.payload,
      };
    default:
      return state;
  }
};

4. Redux์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„

  1. View์—์„œ Action ๋ฐœ์ƒ
  2. Dispatch๋ฅผ ํ†ตํ•ด Action ์ „๋‹ฌ
  3. Middleware ์ฒ˜๋ฆฌ (์žˆ๋Š” ๊ฒฝ์šฐ)
  4. Reducer์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ
  5. Store ์—…๋ฐ์ดํŠธ
  6. ๊ตฌ๋… ์ค‘์ธ ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง

โœจ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ์ 

1. Redux ์„ค์ • ๊ณผ์ •

// 1. ํŒจํ‚ค์ง€ ์„ค์น˜
// npm install redux react-redux

// 2. ์Šคํ† ์–ด ์ƒ์„ฑ
// src/redux/config/configStore.js
const store = createStore(rootReducer);

// 3. Provider ์„ค์ •
// index.js
<Provider store={store}>
  <App />
</Provider>

2. Ducks ํŒจํ„ด

  • ๋ชจ๋“ˆ ๊ตฌ์กฐ

    // Action Types
    // Action Creators
    // Initial State
    // Reducer
    // export default reducer
  • ์žฅ์ 

    • ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ํ•œ ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ
    • ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ ๊ฐ์†Œ
    • ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

3. Payload ํ™œ์šฉ

// Action Creator with payload
export const addNumber = (payload) => ({
  type: ADD_NUMBER,
  payload,
});

// ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ
const onClickAddNumberHandler = () => {
  dispatch(addNumber(5));
};

๐Ÿš€ ์‹ค์ œ ์ ์šฉ ํฌ์ธํŠธ

  1. ์ƒํƒœ ๊ด€๋ฆฌ ์ „๋žต

    • Local State vs Global State ๊ฒฐ์ •
    • ์ ์ ˆํ•œ ์ƒํƒœ ๋ถ„๋ฆฌ์™€ ๋ชจ๋“ˆํ™”
  2. ์„ฑ๋Šฅ ์ตœ์ ํ™”

    • ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€
    • ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ตฌ์กฐ ์„ค๊ณ„
  3. ํ˜‘์—… ๊ด€์ 

    • ์ผ๊ด€๋œ ์ฝ”๋“œ ๊ตฌ์กฐ (Ducks ํŒจํ„ด)
    • ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜

โญ๏ธ ๋‹ค์Œ ํ•™์Šต ๋ชฉํ‘œ

  • Redux Toolkit ํ™œ์šฉ
  • ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ

Redux๋ฅผ ๋ฐฐ์šฐ๊ณ  ๋‚˜๋‹ˆ "์•„, ์ด๋ž˜์„œ ๋‹ค๋“ค Redux๋ฅผ ์“ฐ๋Š”๊ตฌ๋‚˜!" ํ•˜๋Š” ์ƒ๊ฐ์ด ํ™• ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
Props Drilling ์—†์ด ๊น”๋”ํ•˜๊ฒŒ ์ƒํƒœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆ... ์ตœ๊ณ ! ๐Ÿ˜†

profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

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