useMap
Custom hook that manages a key-value Map state with setter actions.
Usage
import { Fragment } from 'react' import { useMap } from 'usehooks-ts' export default function Component() { const [map, actions] = useMap<string, string>([['key', '🆕']]) const set = () => { actions.set(String(Date.now()), '📦') } const setAll = () => { actions.setAll([ ['hello', '👋'], ['data', '📦'], ]) } const reset = () => { actions.reset() } const remove = () => { actions.remove('hello') } return ( <div> <button onClick={set}>Add</button> <button onClick={reset}>Reset</button> <button onClick={setAll}>Set new data</button> <button onClick={remove} disabled={!map.get('hello')}> {'Remove "hello"'} </button> <pre> Map ( {Array.from(map.entries()).map(([key, value]) => ( <Fragment key={key}>{`\n ${key}: ${value}`}</Fragment> ))} <br />) </pre> </div> ) } API
▸ useMap<K, V>(initialState?): UseMapReturn<K, V>
Custom hook that manages a key-value Map state with setter actions.
Type parameters
| Name | Description |
|---|---|
K | The type of keys in the map. |
V | The type of values in the map. |
Parameters
| Name | Type | Description |
|---|---|---|
initialState? | MapOrEntries<K, V> | The initial state of the map as a Map or an array of key-value pairs (optional). |
Returns
UseMapReturn<K, V>
A tuple containing the map state and actions to interact with the map.
Type aliases
Ƭ MapOrEntries<K, V>: Map<K, V> | [K, V][]
Represents the type for either a Map or an array of key-value pairs.
Type parameters
| Name | Description |
|---|---|
K | The type of keys in the map. |
V | The type of values in the map. |
Ƭ UseMapActions<K, V>: Object
Represents the actions available to interact with the map state.
Type parameters
| Name | Description |
|---|---|
K | The type of keys in the map. |
V | The type of values in the map. |
Type declaration
| Name | Type | Description |
|---|---|---|
remove | (key: K) => void | Remove a key-value pair from the map. |
reset | Map<K, V>["clear"] | Reset the map to an empty state. |
set | (key: K, value: V) => void | Set a key-value pair in the map. |
setAll | (entries: MapOrEntries<K, V>) => void | Set all key-value pairs in the map. |
Ƭ UseMapReturn<K, V>: [Omit<Map<K, V>, "set" | "clear" | "delete">, UseMapActions<K, V>]
Represents the return type of the useMap hook. We hide some setters from the returned map to disable autocompletion.
Type parameters
| Name | Description |
|---|---|
K | The type of keys in the map. |
V | The type of values in the map. |
Hook
import { useCallback, useState } from 'react' type MapOrEntries<K, V> = Map<K, V> | [K, V][] type UseMapActions<K, V> = { set: (key: K, value: V) => void setAll: (entries: MapOrEntries<K, V>) => void remove: (key: K) => void reset: Map<K, V>['clear'] } type UseMapReturn<K, V> = [ Omit<Map<K, V>, 'set' | 'clear' | 'delete'>, UseMapActions<K, V>, ] export function useMap<K, V>( initialState: MapOrEntries<K, V> = new Map(), ): UseMapReturn<K, V> { const [map, setMap] = useState(new Map(initialState)) const actions: UseMapActions<K, V> = { set: useCallback((key, value) => { setMap(prev => { const copy = new Map(prev) copy.set(key, value) return copy }) }, []), setAll: useCallback(entries => { setMap(() => new Map(entries)) }, []), remove: useCallback(key => { setMap(prev => { const copy = new Map(prev) copy.delete(key) return copy }) }, []), reset: useCallback(() => { setMap(() => new Map()) }, []), } return [map, actions] }