useBoolean is a hook for managing a boolean state with convenient callbacks setTrue and setFalse.
The hook returns a hybrid structure that supports both tuple and object destructuring:
- Tuple:
[value, setTrue, setFalse] - Object:
{ value, setTrue, setFalse }
This lets you choose whichever syntax is more convenient: compact tuple usage in components, or named access in more complex cases.
function useBoolean(initialValue?: boolean): UseBooleanReturn;-
Parameters
initialValue?: boolean— initial state value, defaults tofalse.
-
Returns:
UseBooleanReturn— a hybrid structure with both tuple and object forms:value: boolean— current state value.setTrue(): void— sets the state totrue.setFalse(): void— sets the state tofalse.- Tuple access:
[value, setTrue, setFalse].
import { useBoolean } from '@webeach/react-hooks/useBoolean';
export function ModalToggle() {
const [isOpen, open, close] = useBoolean();
return (
<div>
<button onClick={open}>Open modal</button>
{isOpen && (
<div role="dialog">
<p>Content…</p>
<button onClick={close}>Close</button>
</div>
)}
</div>
);
}import { useBoolean } from '@webeach/react-hooks/useBoolean';
export function Details() {
const bool = useBoolean(true); // start with true
return (
<section>
<header>
<button onClick={bool.setFalse}>Hide</button>
<button onClick={bool.setTrue}>Show</button>
</header>
{bool.value && <div>Visible section</div>}
</section>
);
}import { useEffect } from 'react';
import { useBoolean } from '@webeach/react-hooks/useBoolean';
export function LiveSubscription() {
const { value: enabled, setTrue, setFalse } = useBoolean(false);
useEffect(() => {
const onKey = (e: KeyboardEvent) => {
if (e.key === 'e') setTrue();
if (e.key === 'd') setFalse();
};
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, [setTrue, setFalse]); // they are stable, so deps are optional
return <div>Enabled: {String(enabled)}</div>;
}- Simple state model
- Stores a single boolean value (via
useState).
- Stores a single boolean value (via
- Memoized actions
setTrueandsetFalseare memoized withuseCallbackand remain stable across renders.
- Hybrid structure
- Returned value is built via
useDemandStructure, so you can use tuple or object destructuring without extra calculations.
- Returned value is built via
- No global side effects
- The hook doesn’t rely on global objects (safe for SSR/ISR) and only triggers re-renders when the boolean value changes.
- UI toggles: opening/closing modals, dropdowns, or sidebars.
- Simple state flags: “loading”, “active”, “enabled”, “confirmed”, etc.
- When you want a minimal API with clear
setTrue/setFalseactions and flexible destructuring.
- For complex state transitions (multiple flags, dependent conditions) — prefer
useReduceror a custom hook. - When you need more than just
true/false(e.g.,on/off/indeterminate) — useuseStatewith enums or a dedicated hook.
-
Using only tuple destructuring when object form improves clarity
- In complex components,
[value, setTrue, setFalse]can be unclear — prefer{ value, setTrue, setFalse }.
- In complex components,
-
Mixing tuple and object in the same component
- Stick to one style per component to keep the code consistent.
-
Expecting a
togglefunction- The hook only provides
setTrueandsetFalse. If you need a toggle, useuseToggleinstead.
- The hook only provides
Exported types
-
UseBooleanReturn- Hybrid: tuple
[boolean, () => void, () => void]and object{ value: boolean; setTrue: () => void; setFalse: () => void }.
- Hybrid: tuple
-
UseBooleanReturnObject- Object form:
{ value: boolean; setTrue: () => void; setFalse: () => void }.
- Object form:
-
UseBooleanReturnTuple- Tuple form:
[boolean, () => void, () => void].
- Tuple form: