Skip to main content

Actions

Actions represent unique events in our application. Reducer functions will process the actions in order to update state.

An action is a simple object with a type property:

const addTodo = {
type: 'ADD_TODO',
// Besides `type`, the structure of an action object is really up to you.
payload: 'Use Redux'
}

Now we can dispatch the addTodo action to the store and let the reducers calculate the new global state.

store.dispatch(addTodo);

Action Creators

Of course, we do not want to create these action objects "by hand" when we need to dispatch an action. Action Creators will do the repetitive work for us.

"Classic" Action Creators

export function addTodo(payload) {
return {
type: 'ADD_TODO',
payload
}
}

Dispatch the action:

store.dispatch(addTodo({id: 1, title: 'Use Redux'}));

Class-based Action Creators (TypeScript)

todo.ts
export interface Todo {
id: number;
title: string;
}
todo-actions.ts
import { Action } from 'mini-rx-store';
import { Todo } from './todo';

export enum TodoActionTypes {
AddTodo = 'ADD_TODO',
RemoveTodo = 'REMOVE_TODO'
}

export class AddTodo implements Action {
readonly type = TodoActionTypes.AddTodo;
constructor(public payload: Todo) {}
}

export class RemoveTodo implements Action {
readonly type = TodoActionTypes.RemoveTodo;
constructor(public payload: number) {}
}

// Union the valid types
export type TodoActions = AddTodo | RemoveTodo;

Dispatch the actions:

store.dispatch(new AddTodo({id: 1, title: 'Use Redux'}));

store.dispatch(new RemoveTodo(1))

The upcoming code examples use Class-based Action Creators.

Ts-action

With ts-action you can create actions and reducers with a minimum of boilerplate code. Read more in the ts-action section.