[debug] redux state가 undefine 에러
by 한만섭
이슈
이 이슈는 사실 다른 이유에서도 발생할 수 있는 것이지만 리듀서를 만들 때 범하기 가장 쉬운 실수라 생각 됩니다.
reducer/headerReducer.tsx
import { SCROLL_DOWN, HeaderActionType, ScrollDown } from "./headerTypes";
const initialState: ScrollDown = {
isScrollDown: false
};
const headerReducer = (
state = initialState,
action: HeaderActionType
): ScrollDown => {
switch (action.type) {
case SCROLL_DOWN: {
return {
...state,
isScrollDown: action.isScrollDown
};
}
default:
return state;
}
};
export default headerReducer;
보통 리듀서를 작성할 때 위와 같이 작성하는데 여기서 default에 대해서 크게 생각을 하고 있지 않다가 직접 리듀서를 작성할 때 아래와 같이 default를 빼먹고 작성해버렸습니다. 이렇게 작성할 경우
import { SCROLL_DOWN, HeaderActionType, ScrollDown } from "./headerTypes";
const initialState: ScrollDown = {
isScrollDown: false
};
const headerReducer = (
state = initialState,
action: HeaderActionType
): ScrollDown => {
switch (action.type) {
case SCROLL_DOWN: {
return {
...state,
isScrollDown: action.isScrollDown
};
}
}
};
export default headerReducer;
- 에러가 발생한 이유
이유에 대해선 제 생각이기 때문에 틀릴 수 도 있습니다.
createStore를 통해서 state이렇게 작성할 경우 초기에 state를 initialState로 초기화 해야하는데 store를 만들 때 내부적으로 switch case의 default를 통해서 state를 return 하는 것 같습니다. 근데 default를 정하지 않을 경우 초기 state를 return 하지 못해서 undefine 에러가 뜨는 것 같습니다.
결론
switch case의 default 를 까먹지 말자 !!!
Subscribe via RSS