-
-
Save velopert/4a27f50754c99f42c0f348eeec665990 to your computer and use it in GitHub Desktop.
counter.ts refactored
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { | |
createStandardAction, | |
ActionType, | |
createReducer | |
} from 'typesafe-actions'; | |
// 액션 type 선언 | |
const INCREASE = 'counter/INCREASE'; | |
const DECREASE = 'counter/DECREASE'; | |
const INCREASE_BY = 'counter/INCREASE_BY'; | |
// 액션 생성함수를 선언합니다 | |
export const increase = createStandardAction(INCREASE)(); | |
export const decrease = createStandardAction(DECREASE)(); | |
export const increaseBy = createStandardAction(INCREASE_BY)<number>(); // payload 타입을 Generics 로 설정해주세요. | |
// 액션 객체 타입 준비 | |
const actions = { increase, decrease, increaseBy }; // 모든 액션 생성함수들을 actions 객체에 넣습니다 | |
type CounterAction = ActionType<typeof actions>; // ActionType 를 사용하여 모든 액션 객체들의 타입을 준비해줄 수 있습니다 | |
// 이 리덕스 모듈에서 관리 할 상태의 타입을 선언합니다 | |
type CounterState = { | |
count: number; | |
}; | |
// 초기상태를 선언합니다. | |
const initialState: CounterState = { | |
count: 0 | |
}; | |
// 리듀서를 만듭니다 | |
// createReducer 는 리듀서를 쉽게 만들 수 있게 해주는 함수입니다. | |
// Generics로 리듀서에서 관리할 상태, 그리고 리듀서에서 처리 할 모든 액션 객체들의 타입을 넣어야합니다 | |
const counter = createReducer<CounterState, CounterAction>(initialState, { | |
[INCREASE]: state => ({ count: state.count + 1 }), // 액션을 참조 할 필요 없으면 파라미터로 state 만 받아와도 됩니다 | |
[DECREASE]: state => ({ count: state.count - 1 }), | |
[INCREASE_BY]: (state, action) => ({ count: state.count + action.payload }) // 액션의 타입을 유추 할 수 있습니다. | |
}); | |
export default counter; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment