mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
32 lines
949 B
TypeScript
32 lines
949 B
TypeScript
"use client";
|
|
import type { AppStore } from "@/lib/store";
|
|
import { makeStore } from "@/lib/store";
|
|
import { setupListeners } from "@reduxjs/toolkit/query";
|
|
import type { ReactNode } from "react";
|
|
import { useEffect, useRef } from "react";
|
|
import { Provider } from "react-redux";
|
|
|
|
interface Props {
|
|
readonly children: ReactNode;
|
|
}
|
|
|
|
export const StoreProvider = ({ children }: Props) => {
|
|
const storeRef = useRef<AppStore | null>(null);
|
|
|
|
if (!storeRef.current) {
|
|
// Create the store instance the first time this renders
|
|
storeRef.current = makeStore();
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (storeRef.current != null) {
|
|
// configure listeners using the provided defaults
|
|
// optional, but required for `refetchOnFocus`/`refetchOnReconnect` behaviors
|
|
const unsubscribe = setupListeners(storeRef.current.dispatch);
|
|
return unsubscribe;
|
|
}
|
|
}, []);
|
|
|
|
return <Provider store={storeRef.current}>{children}</Provider>;
|
|
};
|