UNPKG

@reduxjs/toolkit

Version:

The official, opinionated, batteries-included toolset for efficient Redux development

54 lines (40 loc) 1.52 kB
# Store Lifetime ## Decision table | Environment | Default store shape | Why | | --- | --- | --- | | Client-only SPA | One module-level singleton store | There is one browser session and no cross-request leakage risk. | | SSR-heavy React app | `makeStore()` plus provider-local state | Each request needs its own store instance, but that instance must stay stable across client renders. | | Non-React integration code | Direct store access can be acceptable | This is outside the React context boundary and should stay out of UI components. | ## SPA pattern ```ts import { configureStore } from '@reduxjs/toolkit' import { postsSlice } from '../features/posts/postsSlice' export const store = configureStore({ reducer: { posts: postsSlice.reducer, }, }) ``` Use this for classic browser SPAs. ## SSR-heavy React pattern ```tsx // file: src/lib/store.ts import { configureStore } from '@reduxjs/toolkit' import { postsSlice } from '../features/posts/postsSlice' export const makeStore = () => configureStore({ reducer: { posts: postsSlice.reducer, }, }) // file: src/app/StoreProvider.tsx 'use client' import { useState, type ReactNode } from 'react' import { Provider } from 'react-redux' import { makeStore } from '../lib/store' export function StoreProvider({ children }: { children: ReactNode }) { const [store] = useState(makeStore) return <Provider store={store}>{children}</Provider> } ``` Create the store per request, then keep it stable inside the provider component.