원래 리덕스란 이전 state와 action을 받아서 다음 state을 리턴한다. 이 때 기존의 prevState가 불변성을 유지 하기 위해서 얕은 복사를 하는데, immer를 사용하면 앞의 불변성을 유지하기 때문에 조다. 특히 Immer를 사용하면 중괄호 안에 중괄호 안에 중괄호에 있는 값을 변경하기 좋다.
기본형태
const userReducer = (prevState = initialState, action) =>{
return produce(prevState, drafts) => {
...
switch문
...
}
}
});
draft 는 복사본이다. 따라서 draft.data=null; 와 같은 형태로 draft를 사용하면 immer가 알아서 draft와 prevState를 비교하여 다음 state로 만들어준다.
[기존 코드]
case "LOGIN_SUCCESS" :
return {
...prevState,
data:action.data,
isLoggingIn: false,
}
[immer를 사용한 코드]
case "LOGIN_SUCCESS" :
draft.data = action.data;
draft.isLoggingIn = false;
break;
[기존 코드2]
case "ADD_POST" :
return [
...prevState, action.data
]
[immer를 사용한 코드2]
case "ADD_POST" :
draft.push(action.data);