1차 공부/React공부

immer란?

공대탈출 2022. 12. 10. 21:56

객체의 불변성을 지키는 것을 쉽게 도와주는 라이브러리이다.

보통 추가, 제거, 변경 등 몇가지 일을 할 때 전개연산자...을 사용해서 불변성을 지키는데, 

immer이라는 라이브러리를 사용하면 훨씬 쉽게 할 수 있다.

 

아래는 추가와 변경의 간단한 예제이다.

import produce from 'immer'

const baseState = [
	{
    	todo: "Learn typescript",
        done: true,
    },
    {
    	todo: "Try immer",
        done: false,
    },
];

const nextState = produce(baseState, draftState => {
	draftState.push({todo: "Tweet about it"});
    draftState[0].done : true;
});

immer에서는 오직 produce만 알면 된다.

2가지 파라미터를 가져오고 그중 첫번째는 수정하고 싶은 객체/배열이고,

                                                               두번째는 첫펀째 파라미터에 할당된 객체/배열을 바꾸는 함수이다.

 

 

reduc에서 immer쓰기

immer쓰기 전 코드

const initialState = [{ name: "nkh", address: { city: "seoul" } }];

export default function auth(state = initialState, action) {
  switch (action.type) {
    case SET_INFO:
      return {
        ...state,
        name: "kkkk",
        address: {
          ...state.address,
          city: "kkkk"
        }
      };
    default:
      return state;
  }
}

 

immer을 사용한 redux 코드

const initialState = [{ name: "nkh", address: { city: "seoul" } }];

export default function auth(state = initialState, action) {
  produce(state, draft => {
    switch (action.type) {
      case SET_INFO:
        draft[0].name = action.data.name;
        draft[0].address.city = action.data.city;
        break;
      case ADD_INFO:
        draft.push({ name: "hhh", address: { city: "zzz" } });
      default:
        return draft;
    }
  });
}

굉장히 활용성 높은 라이브러리인것 같아 사용해보고싶다.

'1차 공부 > React공부' 카테고리의 다른 글

Axios  (0) 2022.12.10
json server  (0) 2022.12.10
Flux과 Redux (정리필요)  (0) 2022.12.10
리덕스 툴킷  (0) 2022.12.10
HTTP, URI(URL, URN)  (0) 2022.12.03