Skip to content
This repository was archived by the owner on Feb 19, 2021. It is now read-only.

Commit dc32352

Browse files
authored
Merge pull request #1 from JamesInnes2169/persist-store-local-storage
imp persist store to local storage
2 parents 4317b60 + 9a9a59d commit dc32352

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

package-lock.json

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

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
]
4747
},
4848
"devDependencies": {
49+
"@types/lodash": "^4.14.137",
4950
"@types/redux-logger": "^3.0.7",
5051
"@types/uuid": "^3.4.5"
5152
}

src/redux/configureStore.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,26 @@ import { configureStore, getDefaultMiddleware } from 'redux-starter-kit'
22
import logger from 'redux-logger'
33
import { reduxBatch } from '@manaflair/redux-batch'
44
import preloadedState from './preloadedState';
5+
import { loadState, saveState } from './localStorage'
56
import reducer from './todosSlice';
7+
import { throttle } from 'lodash';
8+
9+
const persistedState = loadState();
610

711
const store = configureStore({
812
reducer: {
913
todos: reducer,
1014
},
1115
middleware: [...getDefaultMiddleware(), logger],
1216
devTools: process.env.NODE_ENV !== 'production',
13-
preloadedState,
17+
preloadedState: (persistedState || preloadedState),
1418
enhancers: [reduxBatch]
1519
})
1620

21+
store.subscribe(throttle(() => {
22+
saveState({
23+
todos: store.getState().todos
24+
});
25+
}, 1000));
26+
1727
export default store;

src/redux/localStorage.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export const loadState = () => {
2+
try {
3+
const serializedState = localStorage.getItem('state');
4+
if (serializedState === null) {
5+
return undefined;
6+
}
7+
return JSON.parse(serializedState);
8+
} catch (err) {
9+
return undefined;
10+
}
11+
};
12+
13+
export const saveState = (state: any) => {
14+
try {
15+
const serializedState = JSON.stringify(state);
16+
localStorage.setItem('state', serializedState);
17+
} catch { }
18+
};
19+
20+
export default { loadState, saveState }

0 commit comments

Comments
 (0)