UNPKG

easy-peasy

Version:

Vegetarian friendly state for React

42 lines (36 loc) 1.06 kB
/* eslint-disable react/prop-types */ import React, { createContext, useContext, useMemo } from 'react'; import { createStoreActionsHook, createStoreDispatchHook, createStoreStateHook, createStoreRehydratedHook, } from './hooks'; import createStore from './create-store'; export default function createContextStore(model, config) { const StoreContext = createContext(); function Provider({ children, initialData }) { const store = useMemo( () => createStore( typeof model === 'function' ? model(initialData) : model, config, ), [], ); return ( <StoreContext.Provider value={store}>{children}</StoreContext.Provider> ); } function useStore() { return useContext(StoreContext); } return { Provider, useStore, useStoreState: createStoreStateHook(StoreContext), useStoreActions: createStoreActionsHook(StoreContext), useStoreDispatch: createStoreDispatchHook(StoreContext), useStoreRehydrated: createStoreRehydratedHook(StoreContext), }; }