useReducer

useReducer

์‚ฌ์šฉ๋ฒ• #1

import React, { useReducer, useState } from 'react';

// reducer - state๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์—ญํ• (์€ํ–‰)
// dispatch - state ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์š”๊ตฌ
// action - ์š”๊ตฌ์˜ ๋‚ด์šฉ

const ACTION_TYPES = {
  deposit: 'deposit',
  withdraw: 'withdraw',
};

const reducer = (state, action) => {
  console.log('reducer is working', state, action);
  switch (action.type) {
    case ACTION_TYPES.deposit:
      return state + action.payload;
    case ACTION_TYPES.withdraw:
      return state - action.payload;
    default:
      return state;
  }
};

function App() {
  const [number, setNumber] = useState(0);
  const [money, dispatch] = useReducer(reducer, 0);

  return (
    <div>
      <h2>useReducer ์€ํ–‰์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค</h2>
      <p>์ž”๊ณ : {money}์›</p>
      <input
        type="number"
        value={number}
        onChange={(e) => setNumber(parseInt(e.target.value))}
        step="1000"
      />
      <button
        onClick={() => {
          dispatch({ type: ACTION_TYPES.deposit, payload: number });
        }}
      >
        ์˜ˆ๊ธˆ
      </button>
      <button
        onClick={() => {
          dispatch({ type: ACTION_TYPES.withdraw, payload: number });
        }}
      >
        ์ถœ๊ธˆ
      </button>
    </div>
  );
}

export default App;

์‚ฌ์šฉ๋ฒ• #2

useReducer.jsx

Student.jsx

Last updated