immer

노영완·2023년 2월 10일

Redux

목록 보기
3/7

redux에서 reducer는 불변성을 띄어야하는 특징이 있다 불변성을 띄어야지만 우리는 나중에 디버깅할때 유리하기 때문이다.

실제 불변성을 유지한 코드

const initialState = {
  isLoggingIn: false,
  data: null,
};
export const userReducer = (prevState = initialState, action) => {
  //새로운 스테이트 만들어주기
  switch (action.type) {
    case "LOGIN":
      return {
        ...prevState,
        isLoggingIn:false
        data: action.data,
      };
    case "LOGOUT":
      return {
        ...prevState,
         isLoggingIn:true
        data: action.data,
      };
    default:
      return prevState;
  }
};

스프레드 문법을 통해 기존의 prevState를 유지한채로 새로운 스테이트를 만들어주는 reducer이다 스프레드 문법으로 불변성을 유지했다. 하지만 직관적이지가 않다. 아마 좀 더 복잡한 reducer 코드이면 정말 보기 힘들 것 이다.

immer

그래서 좀 더 직관적인 reducer를 짤건데 그 때 유용한게 immer 라이브러리 이다.

npm i immer

immer를 install 한 후

export const userReducer = (prevState = initialState, action) => {
  return produce(prevState, (draft) => {
    switch (action.type) {
      case "LOGIN":
        draft.data = action.data;
        draft.isLoggingIn = false;
        break;
      case "LOGOUT":
        draft.data = action.data;
        draft.isLoggingIn = true;
        break;
      default:
        break;
    }
  });
};

첫번째로 import를 해와야 한다. produce로 import를 해온다.
그리고 produce를 return 해오고 draft인자인 함수로 switch 해준다. draft는 기존 prevState를 가져온다 라는 뜻이다. 즉, 기존 prevState를 가져온 상태를 유지하면서 data등을 넣는다.

0개의 댓글