Skip to content

rymizuki/syntagmejs

Repository files navigation

syntagme.js

Syntagme is a flux's flamework.

npm version Bower version Build Status Codacy Badge Codacy Badge Dependency Status

Installation

bower:

bower install --save syntagme

npm:

npm install --save syntagme

Example

Simplest case

import syntagme from 'syntagme'

const app = syntagme()

app.actionCreator('INCREMENT', () => {
  return { value: 1 }
})

app.reducer(function counterReducer (payload, previous_state={}) {
  switch (payload.action.type) {
    case 'INCREMENT':
      return Object.assign({}, previous_state, { count: payload.action.value + 1 })
  }
})

app.listen()

app.subscribe(function listener (state) {
  console.log('count:', state.count)
})

app.action('INCREMENT')
console.log(app.getState().count) // 2

Promise on ActionCreator

import syntagme from 'syntagme'

const app = syntagme()

app.actionCreator('FETCH', ({ type }) => {
  return new Promise((resolve, reject) => {
    http.get(`/api/message?type=${ type }`)
      .then((response)   => { resolve({data: response.data}) })
      .catch((rejection) => { reject(rejection) })
  })
})

app.reducer(function actionReducer (payload, previous_state={}) {
  switch (payload.action.type) {
    case 'FETCH':
      return Object.assign({}, previous_state, {error: null, loading: true})
    case 'FETCH_RESOLVE':
      return Object.assign({}, previous_state, {error: null, loading: false, payload.action.data})
    case 'FETCH_REJECT':
      return Object.assign({}, previous_state, {error: payload.action.rejection, loading: false, data: null})
  }
})
app.listen()

app.subscribe(function listener (state) {
  console.log('count:', state.count)
})

app.action('FETCH', { type: 'greeting' })

Documentation

app.listen()

Subscribe to state and start executing dispatcher. If dispatch is executed before listen, it gets an error.

app.subscribe(listener: (state) => void)

Subscribe to store updates. listener is executed when state is updated.

app.reducer(reducer: (payload, state) => (state | null))

Register the reducer. Reducers are executed in the order in which they are registered.

If you do not return the new state, subscribe will not be executed.

app.actionCreator(type: ActionType, actionCreator: () => Promise | null)

Register the ActionCreator. Dispatch the evaluation result of the specified function as Action.

When returning Promise, _RESOLVE when resolving, and _REJECT when rejecting are combined with type and dispatched.

app.action(type: ActionType, args)

Dispatch the ActionCreator registered based on type.

An error occurs if you specify an unregistered ActionType.

License

MIT

About

Syntagme is a flux's flamework.

Resources

Stars

Watchers

Forks

Packages

No packages published