# useMap > Manage a Map as immutable React state. - Category: State - Package: `hookli` (install with `npm i hookli`) - Docs: https://hookli.vercel.app/docs/use-map ## Signature ```ts useMap(initialState?: MapOrEntries): [ReadOnlyMap, UseMapActions] ``` ## Parameters - `initialState`: `MapOrEntries` (default: `new Map()`) — Initial entries as a Map or an array of [key, value] pairs. ## Returns - `[0] map`: `ReadOnlyMap` — A read-only view of the map — the mutating set/clear/delete methods are omitted; use the actions instead. get, has, size and iteration remain. - `[1] actions`: `UseMapActions` — Stable helpers that replace the map with a fresh copy so React re-renders — see below. ## Types ### UseMapActions The second tuple element — the map mutation helpers. - `set`: `(key: K, value: V) => void` — Adds or updates one entry. - `setAll`: `(entries: MapOrEntries) => void` — Replaces every entry with the given Map or [key, value] pairs. - `remove`: `(key: K) => void` — Deletes the entry for the given key. - `reset`: `() => void` — Empties the map. ## Usage ```tsx import { useMap } from "hookli"; export function Demo() { const [map, { set, remove, reset }] = useMap([ ["theme", "dark"], ]); return (
    {[...map.entries()].map(([key, value]) => (
  • {key}: {value}
  • ))}
); } ``` ## Source `src/hooks/use-map/use-map.ts` ```ts import { useCallback, useState } from "react"; export type MapOrEntries = Map | [K, V][]; export interface UseMapActions { set: (key: K, value: V) => void; setAll: (entries: MapOrEntries) => void; remove: (key: K) => void; reset: () => void; } export type ReadOnlyMap = Omit, "set" | "clear" | "delete">; export type UseMapReturn = [ReadOnlyMap, UseMapActions]; export function useMap( initialState: MapOrEntries = new Map(), ): UseMapReturn { const [map, setMap] = useState(() => new Map(initialState)); const set = useCallback((key: K, value: V) => { setMap((prev) => { const next = new Map(prev); next.set(key, value); return next; }); }, []); const setAll = useCallback((entries: MapOrEntries) => { setMap(new Map(entries)); }, []); const remove = useCallback((key: K) => { setMap((prev) => { const next = new Map(prev); next.delete(key); return next; }); }, []); const reset = useCallback(() => { setMap(new Map()); }, []); return [map, { set, setAll, remove, reset }]; } ```