Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/varharrie/vuex-action

:hammer: Utilities for vuex to easily create and manage actions.
https://github.com/varharrie/vuex-action

vuejs vuejs2 vuex vuex-action

Last synced: 17 days ago
JSON representation

:hammer: Utilities for vuex to easily create and manage actions.

Awesome Lists containing this project

README

        

# vuex-action

Utilities for vuex to easily create and manage actions.

- Allow you to create `untyped` action
- Support for `Promise`
- Work with `vue@1` and `vue@2`

## Installation

```bash
npm install --save vuex-action
```

## API

```javascript
import {createAction, createActions} from 'vuex-action'
```

### createAction(type?: string, payloadHandler?: () => any | Promise)

It creates an `action`, and the action `type` will generated by uuidV4() if not specified.

### createActions(prefix?: string, payloadHandlers: Array | Object)

Similarly, creates a lot of actions.

## Usage

> For complete examples, see [examples](https://github.com/varHarrie/vuex-action/tree/master/examples)

```javascript
// Create an action
const increment = createAction('ACTION_TYPE')
// Or
const increment = createAction()
```

With normal function:
```javascript
// PayloadHandler allows you to customize the payload
const add = createAction((num) => num || 1)
// Therefore
store.dispatch('add') // + 1
store.dispatch('add', 5) // + 5
```

With Promise:
```javascript
// Here is a function to fetch a user
const fetchUserApi = function (name) {
return Promise.resolve({username: name})
}
// Return a Promise
const fetchUser = createAction((name) => fetchUserApi(name))
store.dispatch('fetchUser', 'Harrie') // payload = {username: 'Harrie'}
```

Or create actions together:

```javascript
// use `createActions` instance of `createAction`
const actions = createActions([
'increment',
{
add: (num) => num || 1,
fetchUser: (name) => fetchUserApi(name)
}
])
```

The store:

```javascript
const store = new Vuex.Store({
state: {
count: 0,
user: null
},
mutations: {
// Just make it as a type
[increment] (state, num) {
state.count += num
},
[fetchUser] (state, user) {
state.user = user
}
},
actions: {
increment,
fetchUser
}
})
```

## Inspired by

* [redux-act](https://github.com/pauldijou/redux-act) by [pauldijou](https://github.com/pauldijou)