Flummox
Guides
Quick Start
React Integration
Why FluxComponent > fluxMixin
API
Store
Flux
Actions
FluxComponent
Higher-order component
fluxMixin
GitHub

# `Actions`

Create actions by extending from the base `Actions` class.

    class MessageActions extends Actions {

      // Methods on the prototype are automatically converted into actions
      newMessage(content) {

        // The return value from the action is sent to the dispatcher.
        // It is also returned to the caller.
        return content;
      }

      // Asynchronous functions are also supported: just return a promise
      // This is easy using async-await
      async createMessage(messageContent) {
        const response = await serverCreateMessage(messageContent);
        return await response.json();
      }

    }

You can also use a plain JavaScript object. When passed to `flux.createActions`, it will be converted into an Actions class.

    // Same as previous example
    const MessageActions = {
      newMessage(content) {
        return content;
      },

      async createMessage(messageContent) {
        const response = await serverCreateMessage(messageContent);
        return await response.json();
      }
    }

## Testing

The return value of an action is dispatched automatically. It’s also returned to the caller. This means it’s possible to test actions completely independently from a Flux or Store instance. Here’s how you’d test the example MessageActions from above:

    // Using mocha and chai-as-promised
    const actions = new MessageActions();

    expect(actions.newMessage('Hello world!')).to.equal('Hello world');

    // Assuming `serverCreateMessage()` has been mocked
    expect(actions.createMessage('Hello world!')).to.eventually.deep.equal({
      id: 1,
      content: 'Hello world!',
    });

## Asynchronous actions

Asynchronous actions are actions that return promises. Unlike synchronous actions, async actions fire the dispatcher twice: at the beginning and at the end of the action. Refer to the Store API for information on how to register handlers for asynchronous actions.

## Methods

### getActionIds

    object getActionIds()

Returns an object of action ids, keyed by action name. (In most cases, it’s probably more convenient to use `Flux#getActionIds()` instead.)

Also available as `getConstants()`