0.0.9 • Published 7 years ago
redam v0.0.9
redam
Tiny hoc for container.
Installation
yarn add react redamUsage
import React from 'react'
import Redam from 'redam'
const initialState = { count: 0 }
const actions = {
up: ({ state, payload, setState }) =>
state('count')
.then(count => setState({ count: count + payload.value }))
.catch(err => console.error(err)),
down: ({ state, payload, setState }) =>
state('count')
.then(count => setState({ count: count - payload.value }))
.catch(err => console.error(err))
}
const Consumer = ({ provided, value }) =>
<main>
<h1>{`count is ${provided.state.count}`}</h1>
<button onClick={() => provided.dispatch('up', { value })}>
{'+'}
</button>
<button onClick={() => provided.dispatch('down', { value })}>
{'-'}
</button>
</main>
const MyComponent = Redam(initialState, actions, Consumer)
export default MyComponentimport React from 'react'
import MyComponent from './MyComponent.js'
export default () =>
<div>
<MyComponent value={10} />
<MyComponent value={20} />
<MyComponent value={30} />
</div>API
Redam(initialState, actions, Consumer, options)
Component is the result.
initialState
Set in every mount. prevState is passed after second mount if options.singleton: true.
// as object
const initialState = { [key]: value }
// as function
const initialState = (initialProps[, prevState]) => ({ [key]: value })actions
{ [name]: action } or { [name]: action }[]. (name must be unique)
const action = (utils) => actionResultutils
props(key[, clone]): Promise<props[key]>state(key[, clone]): Promise<state[key]>setState(updater[, callback]): Promise<void>forceUpdate(callback): Promise<void>dispatch(actionName, payload): Promise<actionResult>payload: any
setState and forceUpdate return Promise for cancelable, but not be resolved until "didupdate". If hope so, need to pass Promise.resolve as callback.
const action = async ({ setState, forceUpdate }) => {
await new Promise(resolve => setState(updater, resolve))
await new Promise(resolve => forceUpdate(resolve))
}Consumer
Component that is passed props containing provided (configable via options).
const Consumer = ({ provided, ...props }) => ReactNodeprovided
statedispatch(same as action's util)
options
singleton: boolean = falseprovidedKey: string = 'provided'