Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/beekai-oss/little-state-machine
📠 React custom hook for persist state management
https://github.com/beekai-oss/little-state-machine
flux react react-hooks state state-machine state-management
Last synced: 7 days ago
JSON representation
📠 React custom hook for persist state management
- Host: GitHub
- URL: https://github.com/beekai-oss/little-state-machine
- Owner: beekai-oss
- License: mit
- Created: 2019-04-08T23:44:46.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-12-21T22:29:47.000Z (12 months ago)
- Last Synced: 2024-12-02T05:36:24.648Z (12 days ago)
- Topics: flux, react, react-hooks, state, state-machine, state-management
- Language: TypeScript
- Homepage: https://lrz5wloklm.csb.app/
- Size: 2.89 MB
- Stars: 1,480
- Watchers: 13
- Forks: 53
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
📠 Little State Machine
State management made super simple[![npm downloads](https://img.shields.io/npm/dm/little-state-machine.svg?style=for-the-badge)](https://www.npmjs.com/package/little-state-machine)
[![npm](https://img.shields.io/npm/dt/little-state-machine.svg?style=for-the-badge)](https://www.npmjs.com/package/little-state-machine)
[![npm](https://img.shields.io/bundlephobia/minzip/little-state-machine?style=for-the-badge)](https://bundlephobia.com/result?p=little-state-machine)✨ Features
- Tiny with 0 dependency and simple (715B _gzip_)
- Persist state by default (`sessionStorage` or `localStorage`)
- Build with React Hooks📦 Installation
$ npm install little-state-machine
🕹 API
#### 🔗 `StateMachineProvider`
This is a Provider Component to wrapper around your entire app in order to create context.
```tsx
```
#### 🔗 `createStore`
Function to initialize the global store, invoked at your app root (where `` lives).
```tsx
function log(store) {
console.log(store);
return store;
}createStore(
{
yourDetail: { firstName: '', lastName: '' } // it's an object of your state
},
{
name?: string; // rename the store
middleWares?: [ log ]; // function to invoke each action
storageType?: Storage; // session/local storage (default to session)
persist?: 'action' // onAction is default if not provided
// when 'none' is used then state is not persisted
// when 'action' is used then state is saved to the storage after store action is completed
// when 'beforeUnload' is used then state is saved to storage before page unloa
},
);
```#### 🔗 `useStateMachine`
This hook function will return action/actions and state of the app.
```tsx
const { actions, state, getState } = useStateMachine({
updateYourDetail,
});
```📖 Example
Check out the Demo.
```tsx
import React from 'react';
import {
StateMachineProvider,
createStore,
useStateMachine,
} from 'little-state-machine';createStore({
yourDetail: { name: '' },
});function updateName(state, payload) {
return {
...state,
yourDetail: {
...state.yourDetail,
...payload,
},
};
}function YourComponent() {
const { actions, state } = useStateMachine({ updateName });return (
actions.updateName({ name: 'bill' })}>
{state.yourDetail.name}
);
}const App = () => (
);
```## ⌨️ Type Safety (TS)
You can create a `global.d.ts` file to declare your GlobalState's type.
Checkout the [example](https://codesandbox.io/s/typescript-forked-xs30h).
```ts
import 'little-state-machine';declare module 'little-state-machine' {
interface GlobalState {
yourDetail: {
name: string;
};
}
}
```💁♂️ Tutorial
Quick video tutorial on little state machine.
⚒ DevTool
[DevTool](https://github.com/bluebill1049/little-state-machine-dev-tools) component to track your state change and action.
```tsx
import { DevTool } from 'little-state-machine-devtools';
;
```## By the makers of BEEKAI
We also make [BEEKAI](https://www.beekai.com/). Build the next-generation forms with modern technology and best in class user experience and accessibility.
🤝 Contributors
Thanks go to these wonderful people: