1.0.4 • Published 5 years ago

define-store v1.0.4

Weekly downloads
28
License
MIT
Repository
github
Last release
5 years ago

define-store

React hook for global state management.

This package is a light replacement to redux. You can define global state and actions for your application.

Install

npm i define-store

Usage

// in state.js
import { defineStore } from 'define-store'

export const messageState = defineStore('kikou', {
  // is the initial value
  dashJoin: (value, arg) => `${value}-${arg}` // declare actions
})

You may import your globals in your application

All states expose a React Hook™ to use their state.

import { messageState } from './state.js'

const MyApp = () => {
  const message = messageState.use()

  return <div>{message}</div>
}

All states have a get method to get their values outside of a component

You should use the hook inside components or passe the value as props !

import { messageState } from './state.js'

// use your method
messageState.dashJoin('jo')
messageState.get() // = 'kikou-jo'

// and again !
messageState.dashJoin('li')
messageState.get() // = 'kikou-jo-li'

All states have a set method to replace their values

messageState.set('hello')
messageState.get() // = 'hello'

They also have a reset method, setting the value to the initial value

messageState.reset()
messageState.get() // = 'kikou'

You can store anything you want as data.
Classic JS Object's are what we will use the most

// state.js
export const messageState = defineStore({
    content: 'kikou',
    type: 'info'
  },
  // DO NOT DO:
  setType: (type, value) => {
    value.type = type // modify the object
    return value // returning the same object, will not trigger an update.
  }
  // Instead we do:
  setType: (type, value) => ({ ...value, type }),
  // All your actions must return a new value or the change will be ignored.
}

Now because we always have to do this kind of actions, objects have an additional update action

messageState.setType('warning')
messageState.get() // = { content: 'kikou', type: 'warning' }

messageState.update({ type: 'error' })
messageState.get() // = { content: 'kikou', type: 'error' }

That's about it for the state, you can override any predefined actions with your own.

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago