diff --git a/packages/store/src/create-store-context/create-store-context.tsx b/packages/store/src/create-store-context/create-store-context.tsx index e5c44f0..42305f7 100644 --- a/packages/store/src/create-store-context/create-store-context.tsx +++ b/packages/store/src/create-store-context/create-store-context.tsx @@ -32,31 +32,37 @@ export function createStoreContext | AnyFn>( const Context = React.createContext(null); - const Provider = ( - props: { - children: React.ReactNode; - } & StoreParams - ) => { - const { children, ...restProps } = props; - const storeInstance = React.useRef( - createInstance(restProps as StoreParams) + const useProvideStore = (props: StoreParams) => { + const storeInstanceRef = React.useRef( + createInstance(props) ); - + React.useEffect(() => { - const instance = storeInstance.current; + const instance = storeInstanceRef.current; if (!instance) return; - + const effectMethods = createEffectMethods(instance as any); - + effectMethods.subscribeToEffects(); - + return () => { effectMethods.unsubscribeFromEffects(); }; }, []); + + return storeInstanceRef.current; + }; + + const Provider = ( + props: { + children: React.ReactNode; + } & StoreParams + ) => { + const { children, ...restProps } = props; + const storeInstance = useProvideStore(restProps as StoreParams); return ( - + {children} ); @@ -91,6 +97,7 @@ export function createStoreContext | AnyFn>( return { Provider, + useProvideStore, useStore, withProvider, Context,