useReducer (reducer, action, dispatch의 관계)

KIP·2022년 4월 7일
0

사용 js 문법: fill, map

//기존 useState에 담았던 값들을 useReducer를 이용해서 담는다.

const [state, dispatch] = useReducer(reducer, initialstate);

//initialstate선언
const initialstate= {
//state에 담을 값들
a : 0
b: ''
//(원래 const [a, setA] = useState(0), const [b, setB] = useState('')
로 선언했던 것)

}

//변수는 다시 선언해주는 것을 추천 (커뮤니티의 룰) props데이터를 써야할 때 export로 빼준 후 자식에 가서 구조분해할당
const 변수1 = '변수1';

//reducer선언
const reducer = (state, action) =>{
switch(action.type){
case 변수1 :

  //객체로 반환. 리액트 공통 
  return{
  
      ...state,   //객체를 새롭게 복사하는 spread문법 => 얕은복사 (불변성) 
    a : state.a === 0 ? 1 : 0, 과 같이 initialstate에 담긴 값을 바꾼 후 반환,
    b : action.b
      
  }
}

}
const ComponentA = () => {

//useCallback은 함수자체를 기억
//useMemo는 반환된 값을 기억한다.

const onClickB = useCallback(() =>{

dispatch({type: 변수1, b: '1'})

//dispatch안에 action개체({type: '', return값(여기선 b) : 1}) => dispatch하면 action을 실행
}, [])

return(
<>

<div
 onClick={onClickB}>
{state.b && <div>값은 {state.b}입니다.</div> }
)} ** 정리** useReducer는 state에 있는 값들을 실행시킬 때는 dispatch를 이용하고, state의 관리는 reducer로 한다.

0개의 댓글