Yevhen Klymentiev
dark
light
console
darkness
y.klymentiev@gmail.com
Reusable Snippets|Practical utility code for everyday use — custom-built and ready to share

useToggle

Creates a toggleable boolean state with getter, toggle, and setter functions.

TypeScript
Copied!
1/**
2 * Creates a toggleable boolean state with getter, toggle, and setter functions.
3 *
4 * @param initial - Initial boolean value (default: false).
5 * @returns An object with `get`, `toggle`, and `set` methods.
6 *
7 * @example
8 * const toggle = useToggle(true);
9 * toggle.get();     // true
10 * toggle.toggle();  // false
11 * toggle.set(true); // true
12 */
13export function useToggle(initial = false): {
14  get: () => boolean;
15  toggle: () => void;
16  set: (value: boolean) => void;
17} {
18  let state = initial;
19
20  return {
21    get: () => state,
22    toggle: () => {
23      state = !state;
24    },
25    set: (value: boolean) => {
26      state = value;
27    }
28  };
29}
  • Encapsulated Boolean State

    Provides a clean, self-contained way to manage simple boolean toggles without external state management.

  • Minimal API Surface

    Exposes just three intuitive methods: get, toggle, and set, making it easy to use and reason about.

  • Internal State Isolation

    Maintains its own internal state, reducing coupling and making it ideal for modular logic.

  • Lightweight and Side-Effect-Free

    Simple implementation with no dependencies or side effects, suitable for utility-first use cases.

Tests | Examples

TypeScript
Copied!
1test('useToggle - default starts as false', () => {
2  const toggle = useToggle();
3  expect(toggle.get()).toBe(false);
4  toggle.toggle();
5  expect(toggle.get()).toBe(true);
6});
7
8test('useToggle - starts with true', () => {
9  const toggle = useToggle(true);
10  expect(toggle.get()).toBe(true);
11});
12
13test('useToggle - set method overrides value', () => {
14  const toggle = useToggle();
15  toggle.set(true);
16  expect(toggle.get()).toBe(true);
17  toggle.set(false);
18  expect(toggle.get()).toBe(false);
19});
20
21test('useToggle - toggle flips current state', () => {
22  const toggle = useToggle(false);
23  toggle.toggle();
24  expect(toggle.get()).toBe(true);
25  toggle.toggle();
26  expect(toggle.get()).toBe(false);
27});

Common Use Cases

  • UI Visibility Toggles

    Manage show/hide states for modals, dropdowns, tooltips, or other toggleable components.

  • Feature Flags or Modes

    Switch between editing/viewing modes, light/dark themes, or binary feature states.

  • Custom Hooks or Utility Libraries

    Use as a foundation for reusable toggle logic in larger utility or hook systems.

  • Event-Driven Flows

    Maintain state for toggles triggered by keyboard shortcuts, gestures, or hardware events.

  • Testing and Simulation

    Control mock states (e.g., authentication, loading) in test environments or storybook setups.

Codebase: Utilities -> Functions -> useToggle | Yevhen Klymentiev