티스토리 뷰
[Redux] reducer에서 immer를 이용한 불변성관리 예시코드.
리덕스에서 새로운 state를 반환해주기 위한 함수로 reducer를 사용한다.
reducer에서는 한가지 지켜줘야하는 것이 있는데, 바로 불변성이다.
불변성을 지키기 위해서는 이전상태를 변경하지 않고, 이전 상태를 참조해 새로운 상태를 반환해 줘야된다.
이때, 주로 얕은 복사를 이용한다.
얕은 복사를 이용해서 충분히 불변성을 유지할 수 있지만, depth가 깊어질수록 코드가 길어지고 가독성이 떨어지는 문제가 발생한다.
이를 해결하기 위해 등장한 것이 immer이다. 예시 코드를 통해 immer를 이용해 불변성 관리하는 방법을 확인해보자.
@ immer
const { produce } = require('immer');
const initialState = {
isLoggingIn: false,
data: null,
};
// immer를 사용하기 위해서는 produce(prevState, callback) 함수로 감싸주어야 한다.
// callback함수의 인자로는 draft를 넣어준다.
// draft는 prevState를 얕은복사한 값이라고 생각하면 된다.
// draft값을 변경해 불변성을 유지한채 nextState를 만들 수 있다.
const userReducer = (prevState = initialState, action) => {
return produce(prevState, (draft) => {
switch (action.type) {
case 'LOG_IN_REQUEST':
draft.data = null;
draft.isLoggingIn = true;
break;
case 'LOG_IN_SUCCESS':
draft.data = action.data;
draft.isLoggingIn = false;
break;
case 'LOG_IN_FAILURE':
draft.data = null;
draft.isLoggingIn = false;
break;
case 'LOG_OUT':
draft.data = null;
break;
default:
break;
}
});
};
module.exports = userReducer;
'개발일기 > ETC' 카테고리의 다른 글
VSC (Visual Studio Code) 단축키 모음, 내가 자주사용하는 단축키 위주로 (0) | 2022.03.03 |
---|---|
프론트단에서 쿠키가 받아지지 않을 때, 해결방법 : withCredentials 설정하기 (0) | 2022.02.24 |
HTTP 상태(응답) 코드정리 , ERROR CODE정리 (0) | 2022.02.22 |
Catch문에서 Error Status Code 받는 방법 (0) | 2022.02.22 |
[Redux] Redux middleware 만드는 방법 (0) | 2022.02.22 |
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- zep
- 모두CBT
- 전기산업기사
- dummydata
- 전자기학
- 전기기기
- 개더타운
- 전기기사실기단답
- 전력공학
- JavaScript
- 전기기사
- gathertown
- nextjs
- TypeScript
- 전기공사기사
- 게더타운맵
- 게더타운
- fakerjs
- cbt
- 전기기사실기CBT
- shortid
- 산업안전기사
- 전기기사필기
- 산업안전기사 실기
- React
- TS
- 전기기사 필기
- KEC반영
- 실기CBT
- 산안기 합격률
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함