Files
vercel__next.js/examples/with-mobx/components/StoreProvider.js
Steven 4466ba436b chore(examples): use default prettier for examples/templates (#60530)
## Description
This PR ensures that the default prettier config is used for examples
and templates.

This config is compatible with `prettier@3` as well (upgrading prettier
is bigger change that can be a future PR).

## Changes
- Updated `.prettierrc.json` in root with `"trailingComma": "es5"` (will
be needed upgrading to prettier@3)
- Added `examples/.prettierrc.json` with default config (this will
change every example)
- Added `packages/create-next-app/templates/.prettierrc.json` with
default config (this will change every template)

## Related

- Fixes #54402
- Closes #54409
2024-01-11 16:01:44 -07:00

39 lines
1.0 KiB
JavaScript

import { createContext, useContext } from "react";
import { Store } from "../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;
}
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;
}
export function StoreProvider({ children, initialState: initialData }) {
const store = initializeStore(initialData);
return (
<StoreContext.Provider value={store}>{children}</StoreContext.Provider>
);
}