๐ŸŒ WEB/React

React - useReducer

์• ์ •์“ฐ 2021. 5. 24. 16:39

userState๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Hook

๋ฆฌ๋“€์„œ๋Š” ํ˜„์žฌ ์ƒํƒœ, ๊ทธ๋ฆฌ๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์•ก์…˜ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.(์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ ์ฃผ์–ด์•ผ ํ•œ๋‹ค)

 

์˜ˆ์ œ๋กœ ์—ฌ๋Ÿฌ ์ธํ’‹์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•ด๋ด…์‹œ๋‹ค!

import React,{useReducer} from 'react';

function reducer(state,action){
	retunr{
    	...state,
        [action.name] = action.value
       };
 }

 

์šฐ์„  ์œ„์™€ ๊ฐ™์ด reducer ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

1. ...state๋Š” ๊ธฐ์กด์— ์žˆ๋Š” state ๊ฐ’๋“ค์„ ๋ณต์‚ฌ ์‹œํ‚ค๋Š”๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2. action ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ name์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณณ์— value๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค 

-> useReducer์—์„œ์˜ ์•ก์…˜์€ ๊ทธ ์–ด๋–ค ๊ฐ’๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”

e.target ๊ฐ’ ์ž์ฒด๋ฅผ ์•ก์…˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const Info=()=>{
    const [state,dispatch] = useReducer(reducer,{
        name:'',
        age:0
    });
    const {name,age}=state;
    
    const onChange = e =>{
        dispatch(e.target);
    }
    return(
        <div>
            <div>
                <input name = "name" value={name} onChange={onChange}></input>
                <input name = "age" value={age} onChange={onChange}></input>
            </div>
            <div>
                <b>์ด๋ฆ„:{name}</b>
                <b>๋‚˜์ด:{age}</b>
            </div>
        </div>
    )
}
๋ฐ˜์‘ํ˜•