1.2.0 • Published 4 years ago

statebird v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

statebird

Made with create-react-library

NPM JavaScript Style Guide

StateBird provides simple, extensible API's to manage and maintain global state without extraneous boilerplate and code overhead.

Install

npm install --save statebird

Basic Usage

App.js

import { StateBirdProvider } from 'statebird'

export default function App() {
    return (
        <StateBirdProvider initialState={{ useForm: { name: '' } }}>
            <App />
        </StateBirdProvider>
    )
}

hooks/useForm.js

import { generate } from 'statebird'

export default generate('useForm', {})

Form.js

import useForm from '../hooks/useForm'

export default function Form() {
    const {
        state,
        actions: { setState },
    } = useForm()

    return (
        <form>
            <input
                name="name"
                value={state.data.name}
                onChange={e => {
                    setState({
                        [e.target.name]: e.target.value
                    })
                }}
            >
        </form>
    )
}

ThankYou.js

import useForm from '../hooks/useForm'

export default function ThankYou() {
    const { state } = useForm()

    return <div>Thank you for submitting {state.data.name}</div>
}

API Reference

StateBirdProvider

import { StateBirdProvider } from 'statebird'

Props

  • initialState (Object): Sets the initial state of your application

Example

<StateBirdProvider initialState={{ useForm: { name: '' } }}>
    <App />
</StateBirdProvider>

generate

Each hook generated should represent one resource. For example, if you have users and posts create two hooks, one for users and one for posts.

import { generate } from 'statebird'

Arguments

  • name (String): Defines the name of the hook. This name should correclate to a top level object in your initial state
  • options (Object): used to define custom actions or API's
    • api (Object)
    • action (object)

Returns

  • state (Object): the state scoped to this specific hook
    • data: (any)
    • loading: (Boolean)
    • error: (null || Error)
  • actions (Object): contains default and custom actions
    • setState (function): function to set the state of data defined for the hook
    • ...customActions (function)
  • api: (Object): contains custom api functions defined in the hook
    • ...customApis (promise)

Example

export default generate({
    name: 'useForm',
    /**
     * Expose a set of API's to fetch, update, create etc.
     * These must be created here, the hook will not
     * expose any default API's
     */
    api: {
        post: async (payload, globalState, setGlobalState) => {
            const form = await fetch('http://example.com/form', {
                method: 'POST',
                body: JSON.stringify(payload)
            })
        }
    }
    /**
     * Create a set of reusable custom actions to manipulate data
     */
    actions: {
        pushData: (payload, globalState, setGlobalState) => {
            setGlobalState({
                useForm: {
                    data: globalState.useForm.data.concat([payload])
                }
            })
        }
    }
})

License

MIT © natemoore3

1.2.0

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago

0.1.0-alpha

4 years ago