Can you, or should you use localStorage in Redux's initial state? Can you, or should you use localStorage in Redux's initial state? javascript javascript

Can you, or should you use localStorage in Redux's initial state?


Redux createStore 2nd param is intended for store initialization:

createStore(reducer, [initialState], [enhancer])

So you can do something like this:

const initialState = {  id: localStorage.getItem('id'),  name: localStorage.getItem('name'),  loggedInAt: null};const store = createStore(mainReducer, initialState);

Since reducers should be pure functions (i.e. no side effects) and localStorage.setItem is a side effect, you should avoid saving to localStorage in a reducer.

Instead you can:

store.subscribe(() => {    const { id, name } = store.getState();    localStorage.setItem('name', name);    localStorage.setItem('id', id);});

This will happen whenever the state changes, so it might affect performance.

Another option is to save the state only when the page is closed (refresh counts) using onBeforeUnload:

window.onbeforeunload = () => {    const { id, name } = store.getState();    localStorage.setItem('name', name);    localStorage.setItem('id', id);};