npm

Join us for the "JavaScript Supply Chain Security" tech talk, presented by VP of Security, Adam Baldwin. 6/20 at 10am PT.Sign up here »

little-state-machine

2.4.0 • Public • Published
React forme Logo - React hook form valiation

Little State Machine

Flux state management should be easy

Tweet  npm downloads npm npm

  • Follow flux application architecture
  • Tiny with 0 dependency and simple
  • Persist your state by default
  • Build with React Hook

Install

$ npm install little-state-machine

Demo

Check out the Demo.

API

🔗 StateMachineProvider

This is a Provider Component to wrapper around your entire app in order to create context.

🔗 createStore

Function to initial the global store, call at app root where StateMachineProvider is.

🔗 useStateMachine(Action | Actions, Options) =>

{ action: (any) => void, actions: { [key: string] : (any) => void}, state: Object }

// individual action
Action: (store: Object, payload: any) => void;
// multiple actions
Actions{ [keystring] : Action }
// options to name action in debug, and weather trigger global state update to re-render entire app 
Options{
  debugNamestring, // unique debug name can really help you :)
  shouldReRenderAppboolean, 
}

This hook function will return action/actions and state of the app.

🔗 window.STATE_MACHINE_DEBUG

This will toggle the console output in dev tool.

window.LITTLE_STATE_MACHINE_DEBUG(true) to turn debug on in console

window.LITTLE_STATE_MACHINE_DEBUG(false) to turn off debug on in console

🔗 window.STATE_MACHINE_RESET

This will reset the entire store.

window.LITTLE_STATE_MACHINE_RESET() to reset the localStorage or sessionStorage

Example

app.js

import React, { useState } from 'react'
import yourDetail from './yourDetail'
import YourComponent from './yourComponent'
import { StateMachineProvider, createStore } from 'little-state-machine'
 
// create your store
createStore({
  yourDetail,
});
 
const App = ({children}) => {
  return (
    <StateMachineProvider>
      <YourComponent />
    </StateMachineProvider>
  )
}

yourComponent.js

import React from 'react'
import { updateName } from './action.js'
import { useStateMachine } from 'little-state-machine'
 
export default function YourComponent() {
  const {
    action,
    state: { yourDetail: { name } },
  } = useStateMachine(updateName);
 
  return <div onClick={() => action('bill')}>
    {name}
  </div>
}

yourDetail.js

export default {
  name: 'test',
}

action.js

export function updateName(state, payload) {
  return {
    ...state,
    yourDetail: payload,
  }
}

Keywords

install

npm i little-state-machine

Downloadsweekly downloads

407

version

2.4.0

license

MIT

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
Report a vulnerability