Simple-Store
Sometimes, you just need a simple store.
Just a function
This library let's you create a flux-like store out of just a function, and use that store in your React or Svelte apps.
![Build Status](https://travis-ci.com/BigAB/simple-store.svg?branch=master)
Code Example
Create a store
import { createSimpleStoreHook } from '@bigab/simple-store';
const store = createSimpleStoreHook(async (state, action, deps, resolve) => {
if ((!state && !action) || action.type === 'reset') {
resolve({ loading: true });
const response = await deps.fetch('https://example.com/api/things');
const { data: things } = await resonse.json();
return { things, loading: false };
}
if (action.type === 'filter') {
const category = action.payload.category.id;
resolve({ ...state, loading: true });
const response = await deps.fetch(
`https://example.com/api/things/${category}`
);
const { data: things } = await resonse.json();
return { things, loading: false, category };
}
return state;
});
create a store hook for React
const useThings = createSimpleStoreHook(thingsStoreFn);
const ThingList = ({ category }) => {
const [{ things, loading }, dispatch] = useThings();
if (loading) {
return <Spinner />;
}
return (
<>
{things.map(thing => (
<Thing
key={thing.id}
thing={thing}
onSelectCategory={() => {
dispatch(createCategoryFilterAction(category));
}}
/>
))}
</>
);
};
use your store in a Svelte component
Installation
npm install @bigab/simple-store
yarn add @bigab/simple-store
Features
- create a flux store from a simple function
- async by default
- framework agnostic
API Reference
createSimpleStore(storeFn, deps)
storeFn: (state[, action, deps, resolve]) => {}
Tests
npm test
Built with
Contribute
Let people know how they can contribute into your project. A contributing guideline will be a big plus.
License
MIT © Adam L Barrett