Skip to content

Instantly share code, notes, and snippets.

@JaysonChiang
Last active February 28, 2021 16:26
Show Gist options
  • Save JaysonChiang/1c2fe23f21b2bc9d6116e152cdf5ea32 to your computer and use it in GitHub Desktop.
Save JaysonChiang/1c2fe23f21b2bc9d6116e152cdf5ea32 to your computer and use it in GitHub Desktop.
interface for state and action
enum ActionType {
ADD_TODO = 'add_todo',
ADD_TODO_SUCCESS = 'add_todo_success',
ADD_TODO_ERROR = 'add_todo_error',
}
interface TodoState {
loading: boolean;
error: string | null;
data: string[];
}
interface Action {
type: string;
payload?: any;
}
const initialState = {
loading: false,
error: null,
data: [],
}
const reducer = (
state: TodoState = initialState,
action: Action
): TodoState => {
switch (action.type) {
case ActionType.ADD_TODO:
return { loading: true, error: null, data: [] };
case ActionType.ADD_TODO_SUCCESS:
return { loading: false, error: null, data: action.payload };
case ActionType.ADD_TODO_ERROR:
return { loading: false, error: action.payload, data: [] };
default:
return state;
}
};
export default reducer;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment