Skip to main content

Usage

import { useMap } from '@kivora/react';

function KeyValueEditor() {
  const [map, { set, delete: remove, clear }] = useMap([
    ['name', 'Alice'],
    ['role', 'Admin']
  ]);

  return (
    <div>
      {Array.from(map.entries()).map(([key, value]) => (
        <div key={key}>
          <span>{key}: {value}</span>
          <button onClick={() => remove(key)}>Remove</button>
        </div>
      ))}
      <button onClick={() => set('newKey', 'newValue')}>Add Entry</button>
      <button onClick={clear}>Clear All</button>
    </div>
  );
}

Parameters

initialValue
Iterable<readonly [K, V]>
default:"[]"
Initial map entries as an iterable of [key, value] pairs

Return Value

Returns a tuple with the Map instance and mutation handlers:
[0]
Map<K, V>
Current Map instance
[1]
object
Mutation handlers

Examples

Cache Management

const [cache, { set, delete: remove }] = useMap<string, any>();

const fetchData = async (id: string) => {
  if (cache.has(id)) {
    return cache.get(id);
  }
  
  const data = await fetch(`/api/items/${id}`).then(r => r.json());
  set(id, data);
  return data;
};

const invalidate = (id: string) => {
  remove(id);
};

User Preferences

const [preferences, { set }] = useMap([
  ['theme', 'dark'],
  ['fontSize', '16px'],
  ['language', 'en']
]);

return (
  <div>
    <select
      value={preferences.get('theme')}
      onChange={(e) => set('theme', e.target.value)}
    >
      <option value="light">Light</option>
      <option value="dark">Dark</option>
    </select>
  </div>
);

Form Field Errors

const [errors, { set, delete: clearError, clear }] = useMap<string, string>();

const validateField = (field: string, value: string) => {
  if (!value) {
    set(field, 'This field is required');
  } else {
    clearError(field);
  }
};

const handleSubmit = () => {
  if (errors.size === 0) {
    // Submit form
    clear();
  }
};

Dynamic Configuration

const [config, { set, reset }] = useMap([
  ['apiUrl', 'https://api.example.com'],
  ['timeout', '5000'],
  ['retries', '3']
]);

return (
  <div>
    {Array.from(config.entries()).map(([key, value]) => (
      <input
        key={key}
        placeholder={key}
        value={value}
        onChange={(e) => set(key, e.target.value)}
      />
    ))}
    <button onClick={reset}>Reset to Defaults</button>
  </div>
);

Build docs developers (and LLMs) love