# Action Creators

Action creators functions used to easily create actions.

# Without Payload and Metadata

The first parameter of actionCreator() is the type of the action. If you don't specify further parameters, the returned function receives no arguments:

import { actionCreator } from "tsrux";

const fetchTodos = actionCreator("TODOS/FETCH");

// When called returns: { type: "TODOS/FETCH" }
console.log(fetchTodos());

// Has a static property type="TODOS/FETCH"
console.log(fetchTodos.type);

# With Payload, but Without Metadata

The second, optional parameter of actionCreator() is a factory function to create the payload of the action. If you specify it, the returned function receives the same arguments as your factory function:

import { actionCreator } from "tsrux";

const setTodoChecked = actionCreator("TODOS/SET_CHECKED", (id: number, checked: boolean) => ({ id, checked }));

// When called returns: { type: "TODOS/SET_CHECKED", payload: { id: 42, checked: true } }
console.log(setTodoChecked(42, true));

# With Payload and Metadata

The third, optional parameter of actionCreator() is a factory function to create the metadata of the action. If you specify it, the returned function receives the same arguments as your factory function. As such, it must have the same signature as your payload factory:

import { actionCreator } from "tsrux";

const removeTodo = actionCreator("TODOS/REMOVE", (id: number) => ({ id }), (id: number) => ({ metaId: id, foo: "bar" }));

// When called returns: { type: "TODOS/REMOVE", payload: { id: 42 }, meta: { metaId: id, foo: "bar" } }
console.log(removeTodo(42));

# Without Payload, but With Metadata

Of course, you can also leave out the payload factory:

import { actionCreator } from "tsrux";

const removeTodo = actionCreator("TODOS/FOO", undefined, (id: number) => ({ metaId: id, foo: "bar" }));

// When called returns: { type: "TODOS/FOO", meta: { metaId: id, foo: "bar" } }
console.log(removeTodo(42));