Skip to content

Commit 9b2bb0f

Browse files
committed
add redux-persist to localStorage
1 parent f82acf4 commit 9b2bb0f

File tree

4 files changed

+46
-7
lines changed

4 files changed

+46
-7
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"react": "18.2.0",
2121
"react-dom": "18.2.0",
2222
"react-redux": "^8.0.5",
23+
"redux-persist": "^6.0.0",
2324
"typescript": "4.9.5"
2425
},
2526
"devDependencies": {

pnpm-lock.yaml

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Providers.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use client'
22
import { Provider } from 'react-redux'
3-
import { store } from '@/store/store'
3+
import { store, persistor } from '@/store/store'
4+
import { PersistGate } from 'redux-persist/integration/react'
45

56
interface Props {
67
children: React.ReactNode
@@ -9,7 +10,9 @@ interface Props {
910
const Providers = ({ children }: Props) => {
1011
return (
1112
<Provider store={store}>
12-
{children}
13+
<PersistGate loading={null} persistor={persistor}>
14+
{children}
15+
</PersistGate>
1316
</Provider>
1417
)
1518
}

src/store/store.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,36 @@
1-
import { configureStore } from "@reduxjs/toolkit"
2-
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"
31
import { cartSlice } from "./features/cartSlice"
2+
import { configureStore, combineReducers } from '@reduxjs/toolkit';
3+
import { persistReducer, persistStore, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from "redux-persist"
4+
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"
5+
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2"
6+
import storage from "redux-persist/lib/storage"
7+
8+
const persistConfig = {
9+
key: "root",
10+
storage,
11+
stateReconciler: autoMergeLevel2,
12+
}
13+
14+
const rootReducer = combineReducers({
15+
cart: cartSlice.reducer,
16+
})
17+
18+
const persistedReducer = persistReducer(persistConfig, rootReducer)
419

520
export const store = configureStore({
6-
reducer: {
7-
cart: cartSlice.reducer,
8-
},
21+
reducer: persistedReducer,
22+
middleware: (getDefaultMiddleware) =>
23+
getDefaultMiddleware({
24+
serializableCheck: {
25+
ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
26+
},
27+
}),
928
})
1029

1130
export type RootState = ReturnType<typeof store.getState>
1231
export type AppDispatch = typeof store.dispatch
1332

1433
export const useAppDispatch: () => AppDispatch = useDispatch
1534
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
35+
36+
export const persistor = persistStore(store)

0 commit comments

Comments
 (0)