Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: about 2 months ago
JSON representation

📠 React custom hook for persist state management

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: