useToggle
Creates a toggleable boolean state with getter, toggle, and setter functions.
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
, andset
, 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
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.