Stack/React

[React] 상태관리 (useState / useReducer)

7ingout 2022. 6. 24. 09:44

useState (값만 관리)

const [ state, setState] useState(초기값)

setState(state + 1)

ex> const [ number, setNumber ] = useState(0)

 

Counter2.js (useState 버전)

import React, { useState } from 'react';

const Counter2 = (props) => {
    // let number = 0;
    const [ number, setNumber ] = useState(0);   // 기본값은 0이다 
    function Increase() {
        setNumber(number+1);
    }
    function Decrease() {
        setNumber(number-1);
    }
    return (
        <div>
            <h2>{number}</h2>
            <button onClick={Decrease}>-1</button>
            <button onClick={Increase}>+1</button>
        </div>
    );
};

export default Counter2;

 

 

 

useReducer (값이 변경될 때 다른 것 처리도 가능)

import { useReducer } from 'react'

const [ state, dispatch ] = useReducer(함수, 초기값)

ex> const [ state, dispatch ] = useReducer(reducer, 0)

dispatch({ type: "INCREASE" })   // dispatch는 액션을 전달

function reducer(state, action) {

                switch (action.type) {

                case 'INCREASE':

                return state+1;

                case 'DECREASE':

                return state-1;

                }

}

 

Counter2.js (useRecucer 버전)

import React, { useReducer } from 'react';
function reducer(state, action) {
    switch(action.type) {
        case "INCREASE":
            return state +1;
            case "DECREASE":
            return state-1;
            default:
            return state;
    }
}

const Counter2 = (props) => {
    // let number = 0;
    const [ number, dispatch ] = useReducer(reducer, 0);   // 기본값은 0이다 
    function Increase() {
        dispatch({type: "INCREASE"});
    }
    function Decrease() {
        dispatch({type: "DECREASE"});
    }
    return (
        <div>
            <h2>{number}</h2>
            <button onClick={Decrease}>-1</button>
            <button onClick={Increase}>+1</button>
        </div>
    );
};

export default Counter2;