Throughout, we have been manually passing messages to the AppDispatcher. Ex:
AppDispatcher.push({channel: 'todos', actionType: 'create', payload: ...})
This is fine for small apps. For large apps, this approach is error prone. It makes sense to hide #push behind a function call.
function createTodo(todo) {
AppDispatcher.push({channel: 'todos', actionType: 'create', payload: ...})
}
That's fine except that the function is a pain to test because it's not pure. Can we do better? Why yes, yes we can.
function createTodo(todo) {
return {channel: Channels.todos, actionType: TodoActionTypes.create, payload: todo}
}
It's not too hard to write a helper function that hooks up action functions to the AppDispatcher. Notice also how we're using constants.
Action functions can be thought of as pure functions that return a promise to actually do the action.