Zustand Multi Persist
February 15, 2025 ยท View on GitHub
Zustand middleware to persist multiple parts of the state to different storages, building on top of zustand's persist middleware.
Installation
npm install zustand-multi-persist
Usage Example
import { create } from 'zustand';
import { multiPersist } from 'zustand-multi-persist';
import { createJSONStorage } from 'zustand/middleware';
type State = {
localCount: number;
sessionCount: number;
};
const useStore = create<State>()(
multiPersist(
() => ({
localCount: 0,
sessionCount: 0,
}),
{
// The key is the name of the storage
local: {
storage: createJSONStorage(() => localStorage),
partialize: (state) => ({ localCount: state.localCount }),
},
session: {
storage: createJSONStorage(() => sessionStorage),
partialize: (state) => ({ sessionCount: state.sessionCount }),
},
}
)
);
function App() {
const localCount = useStore((state) => state.localCount);
const sessionCount = useStore((state) => state.sessionCount);
return (
<div>
<h1>Local Count: {localCount}</h1>
<h1>Session Count: {sessionCount}</h1>
<button onClick={() => useStore.setState({ localCount: localCount + 1 })}>
Increment Local Count
</button>
<button
onClick={() => useStore.setState({ sessionCount: sessionCount + 1 })}
>
Increment Session Count
</button>
<button onClick={() => useStore.persistMap.local.clearStorage()}>
Clear Local Storage
</button>
<button onClick={() => useStore.persistMap.session.clearStorage()}>
Clear Session Storage
</button>
</div>
);
}
export default App;