npm.io
1.0.2 • Published 4 years ago

actionr

Licence
Apache-2.0
Version
1.0.2
Deps
0
Size
16 kB
Vulns
0
Weekly
0
Stars
1

A simple lightweight eventbus.

Subscribe action handlers to Actioneer

const { subscribe, dispatch } = useActioneer()

const myActionHandler = {
  action: 'my:action',
  handler: ({ dispatch }) => (...args) => {
    // Will print ["Yay, our first action!"], given that the action is dispatched as shown below.
    console.log(args)
  }
}

const subscribedActionSymbols = subscribe(myActionHandler)

dispatch('my:action', 'Yay, our first action!')

unsubscribe(...subscribedActionSymbols)

subscribe() return an array of javascript Symbol that may be used to unsubscribe individual handlers from the eventbus, even when many handlers subscribe to the same action.

Action handlers recieve an object with dispatch(), and may dispatch further actions.

const { subscribe, dispatch } = useActioneer()

const foo = {
  action: 'foo',
  handler: ({ dispatch }) => () => {
    console.log('Running foo')
  }
}

const bar = {
  action: 'bar',
  handler: ({ dispatch }) => () => {
    // this handler dispatches the action "foo"
    dispatch('foo')
  }
}

subscribe(foo, bar)

// Will log "Running foo"
dispatch('foo')

actioneer() also returns a readonly Proxy of it's current state including:

  • actions
  • symbols
  • handlers

Assigning to the state or any of it's keys will throw an error, use subscribe() and unsubscribe() instead.

const { state } = useActioneer()

// An array of symbols per action
console.log(state.actions)

// A key-value store of { [Symbol]: action }
console.log(state.symbols)

// A key-value store of { [Symbol]: handler }
console.log(state.handlers)

Keywords