UNPKG

@jupri-lab/react-store

Version:

A lightweight, easy-to-integrate, and type-safe state management library for React

45 lines (41 loc) 1.47 kB
import { CombineStores, Store } from '@jupri-lab/store-core'; import { useState, useEffect } from 'react'; const combineStores = (stores) => { const combinedStores = new CombineStores(stores); return (selector, subscribe = true) => { const [selectedStore] = useState(() => combinedStores.getStore(selector)); const [_, setState] = useState(selectedStore.get()); useEffect(() => { if (subscribe) { const subscriber = (newState) => { setState(newState); }; const unsubscribe = selectedStore.subscribe(subscriber); return () => unsubscribe(); } }, []); return selectedStore; }; }; function createStore(storeConfigs) { const store = new Store({ actions: storeConfigs.actions, initialState: storeConfigs.initialState, middlewares: storeConfigs.middlewares, name: storeConfigs.name, }); return (options = { subscribe: true }) => { const [, setState] = useState(store.get()); useEffect(() => { if (options.subscribe) { const subscriber = (newState) => { setState(newState); }; const unsubscribe = store.subscribe(subscriber); return () => unsubscribe(); } }, []); return store; }; } export { combineStores, createStore };