bots-frontend/components/StoreProvider.js
2022-11-11 17:03:31 +07:00

38 lines
1.1 KiB
JavaScript

import {createContext, useContext} from 'react';
import {Store} from "../store/store";
let store;
export const StoreContext = createContext();
export function useStore() {
const context = useContext(StoreContext)
if (context === undefined) {
throw new Error('useStore must be used within StoreProvider')
}
return context
}
export function StoreProvider({children, initialState: initialData}) {
const store = initializeStore(initialData);
return <StoreContext.Provider value={store}>{children}</StoreContext.Provider>;
}
function initializeStore(initialData = null) {
const _store = store ?? new Store()
// If your page has Next.js data fetching methods that use a Mobx store, it will
// get hydrated here, check `pages/ssg.js` and `pages/ssr.js` for more details
if (initialData) {
_store.hydrate(initialData)
}
// For SSG and SSR always create a new store
if (typeof window === 'undefined') return _store
// Create the store once in the client
if (!store) store = _store
return _store
}