3.0.7 • Published 6 years ago

orph v3.0.7

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

orph

npm npm Build Status Coverage Status cdn

Design actions by restricting authority.

Installation

yarn add orph

Usage

import React, { Component } from 'react'
import Orph from 'orph'

const store = new Orph({ count: 0 })

store.register({
  UP: (e, { state, render }) =>
    state('count')
    .then(count => count + 1)
    .then(count => render({ count })),

  DOWN: (e, { state, render }) =>
    state('count')
    .then(count => count - 1)
    .then(count => render({ count })),
},{
  prefix: 'RENDER:',
  use: { state: true, render: true }
})

const listeners = store.order()

class App extends Component {
  constructor(props) {
    super(props)
    store.attach(this, { inherit: true })
  }
  componentWillUnmount() {
    store.detach()
  }
  render() {
    return (
      <main>
        <h1>{this.state.count}</h1>
        <button onClick={listeners['RENDER:UP']}>+</button>
        <button onClick={listeners['RENDER:DOWN']}>-</button>
      </main>
    )
  }
}

API

new Orph(initialState)

initialState is set to react when attached and will be never changed.

orph.register(actions, options)

options
  • use

required to restrict authority of use.

  • prefix

string added to name head.

{
  FOO: (data, { render }) => console.log(render) // undefined
},{
  use: {
    dispatch: true
  }
}

orph.order(void | Array): { name: listener }

return object contain listener format function.

store.register({
  FOO: (data, { render }) => {}
},{
  use: { render: true }
})

const listeners = store.order()
// listeners['FOO']: (e) => store.dispatch('FOO', e)

orph.attach(react, options)

used in constructor.

options
  • inherit: boolean set preState to react.state.

orph.detach()

used in componentWillUnmount. Extract instance state as preState.

orph.dispatch(name, data): Promise<Action$Result>

same as below.

orph.list(): { name: useKeys }

util for debug.

orph.getLatestState(key, reference): StateValue

Use

props(key, reference): Promise

state(key, reference): Promise

cloned by default. if reference is true, not be cloned that is passed directly.

render(): Promise

pass arg to setState.

update(): Promise

pass arg to forceUpdate

dispatch(name, data): Promise<Action$Result>

the result is passed by then.

{
  THOUSAND_TIMES: ({ count }, { dispatch }) => count * 1000,
  BUTTON_CLICK: (n, { props, dispatch }) =>
    dispatch('UTIL:THOUSAND_TIMES', { count: props('count') })
    .then((multiplied) => dispatch('RENDER:COUNT', multiplied))
},{
  prefix: 'UTIL:',
  use: { dispatch: true, props: true }
}

All functions registerd can be connected by dispatch.

.catch(err)

Use process will be canceled if run after orph.detach.

state('key')
.then(value => console.log(value))
.catch(err => console.log(err)) // { isDetached: true }

License

MIT (http://opensource.org/licenses/MIT)

3.0.7

6 years ago

3.0.6

6 years ago

3.0.5

6 years ago

3.0.4

6 years ago

3.0.3

6 years ago

3.0.2

6 years ago

3.0.1

6 years ago

3.0.0

6 years ago

2.0.0

6 years ago

1.1.0

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago