Comprehensive React component library for building accessible, responsive user interfaces with 109+ pre-built components, design tokens, and type-safe styling system
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
React hooks for managing state, effects, and component behavior in Chakra UI applications.
Get current breakpoint and responsive values.
import { useBreakpoint, useBreakpointValue } from "@chakra-ui/react";
interface UseBreakpointOptions {
ssr?: boolean;
fallback?: string;
}
function useBreakpoint(options?: UseBreakpointOptions): string | undefined;
type UseBreakpointValueOptions = Omit<UseBreakpointOptions, "breakpoints">;
function useBreakpointValue<T = any>(
value: T[] | Record<string, T>,
opts?: UseBreakpointValueOptions
): T | undefined;Usage:
const breakpoint = useBreakpoint();
// Responsive value as first parameter
const value = useBreakpointValue({ base: "mobile", md: "desktop" });
// With options
const valueWithOptions = useBreakpointValue(
{ base: "mobile", md: "desktop" },
{ ssr: false }
);Match media queries.
import { useMediaQuery } from "@chakra-ui/react";
interface UseMediaQueryOptions {
ssr?: boolean;
fallback?: boolean | boolean[];
}
function useMediaQuery(
query: string | string[],
options?: UseMediaQueryOptions
): boolean[];Usage:
const [isLargerThan768] = useMediaQuery("(min-width: 768px)");Manage open/close state for modals, drawers, etc.
import { useDisclosure } from "@chakra-ui/react";
interface UseDisclosureProps {
open?: boolean;
defaultOpen?: boolean;
onOpen?: () => void;
onClose?: () => void;
id?: string;
}
interface UseDisclosureReturn {
open: boolean;
onOpen: () => void;
onClose: () => void;
onToggle: () => void;
setOpen: (open: boolean) => void;
}
function useDisclosure(props?: UseDisclosureProps): UseDisclosureReturn;Usage:
const { open, onOpen, onClose } = useDisclosure();Manage controlled/uncontrolled state.
import { useControllableState, useControllableProp } from "@chakra-ui/react";
interface UseControllableStateProps<T> {
value?: T;
defaultValue?: T;
onChange?: (value: T) => void;
shouldUpdate?: (prev: T, next: T) => boolean;
}
function useControllableState<T>(props: UseControllableStateProps<T>): [T, (value: T) => void];
function useControllableProp<T>(prop: T | undefined, state: T): [boolean, T];Usage:
const [value, setValue] = useControllableState({
value: controlledValue,
defaultValue: "default",
onChange: handleChange,
});Create stable callback reference.
import { useCallbackRef } from "@chakra-ui/react";
function useCallbackRef<T extends (...args: any[]) => any>(
callback: T | undefined,
deps?: React.DependencyList
): T;Always current ref value.
import { useLiveRef } from "@chakra-ui/react";
function useLiveRef<T>(value: T): React.MutableRefObject<T>;Get previous value from previous render.
import { usePrevious } from "@chakra-ui/react";
function usePrevious<T>(value: T): T | undefined;Effect that skips first render.
import { useUpdateEffect } from "@chakra-ui/react";
function useUpdateEffect(
effect: React.EffectCallback,
deps?: React.DependencyList
): void;SSR-safe layout effect.
import { useSafeLayoutEffect } from "@chakra-ui/react";
const useSafeLayoutEffect: typeof React.useLayoutEffect;Force component re-render.
import { useForceUpdate } from "@chakra-ui/react";
function useForceUpdate(): () => void;Create constant value.
import { useConst } from "@chakra-ui/react";
function useConst<T>(init: T | (() => T)): T;Get element bounding rectangle.
import { useElementRect } from "@chakra-ui/react";
function useElementRect(
ref: React.RefObject<HTMLElement>
): DOMRect | undefined;Manage list collection (from Ark UI).
import { useListCollection } from "@chakra-ui/react";
interface UseListCollectionProps<T> {
items: T[];
itemToString?: (item: T) => string;
itemToValue?: (item: T) => string;
itemToDisabled?: (item: T) => boolean;
}
interface UseListCollectionReturn<T> {
items: T[];
getItem: (value: string) => T | undefined;
find: (value: string) => T | undefined;
stringifyItem: (item: T) => string;
}
function useListCollection<T>(
props: UseListCollectionProps<T>
): UseListCollectionReturn<T>;Manage overlay state (internal use).
import { useOverlay } from "@chakra-ui/react";
// Internal hook - see component-specific hooks for overlay managementComponent-specific hooks from Ark UI are re-exported for direct use:
import {
useAccordion,
useAccordionContext,
useAccordionItemContext,
} from "@chakra-ui/react";
function useAccordion(props: UseAccordionProps): UseAccordionReturn;
function useAccordionContext(): AccordionContext;
function useAccordionItemContext(): AccordionItemContext;import { useAvatar, useAvatarContext } from "@chakra-ui/react";
function useAvatar(props: UseAvatarProps): UseAvatarReturn;
function useAvatarContext(): AvatarContext;import {
useCheckbox,
useCheckboxContext,
useCheckboxGroup,
useCheckboxGroupContext,
useCheckboxCard,
useCheckboxCardContext,
} from "@chakra-ui/react";
function useCheckbox(props: UseCheckboxProps): UseCheckboxReturn;
function useCheckboxContext(): CheckboxContext;
function useCheckboxGroup(props: UseCheckboxGroupProps): UseCheckboxGroupReturn;
function useCheckboxGroupContext(): CheckboxGroupContext;import { useClipboard, useClipboardContext } from "@chakra-ui/react";
function useClipboard(props: UseClipboardProps): UseClipboardReturn;
function useClipboardContext(): ClipboardContext;import { useCollapsible, useCollapsibleContext } from "@chakra-ui/react";
function useCollapsible(props: UseCollapsibleProps): UseCollapsibleReturn;
function useCollapsibleContext(): CollapsibleContext;import { useColorPicker, useColorPickerContext } from "@chakra-ui/react";
function useColorPicker(props: UseColorPickerProps): UseColorPickerReturn;
function useColorPickerContext(): ColorPickerContext;import {
useCombobox,
useComboboxContext,
useComboboxItemContext,
} from "@chakra-ui/react";
function useCombobox(props: UseComboboxProps): UseComboboxReturn;
function useComboboxContext(): ComboboxContext;
function useComboboxItemContext(): ComboboxItemContext;import {
useDialog,
useDialogContext,
useDrawer,
useDrawerContext,
} from "@chakra-ui/react";
function useDialog(props: UseDialogProps): UseDialogReturn;
function useDialogContext(): DialogContext;
function useDrawer(props: UseDialogProps): UseDialogReturn;
function useDrawerContext(): DialogContext;import { useEditable, useEditableContext } from "@chakra-ui/react";
function useEditable(props: UseEditableProps): UseEditableReturn;
function useEditableContext(): EditableContext;import { useFieldContext, useFieldsetContext } from "@chakra-ui/react";
function useFieldContext(): FieldContext;
function useFieldsetContext(): FieldsetContext;import { useFileUpload, useFileUploadContext } from "@chakra-ui/react";
function useFileUpload(props: UseFileUploadProps): UseFileUploadReturn;
function useFileUploadContext(): FileUploadContext;import { useHighlight } from "@chakra-ui/react";
interface UseHighlightProps {
query: string | string[];
text: string;
}
interface HighlightChunk {
text: string;
match: boolean;
}
function useHighlight(props: UseHighlightProps): HighlightChunk[];import { useHoverCard, useHoverCardContext } from "@chakra-ui/react";
function useHoverCard(props: UseHoverCardProps): UseHoverCardReturn;
function useHoverCardContext(): HoverCardContext;import {
useListbox,
useListboxContext,
useListboxItemContext,
} from "@chakra-ui/react";
function useListbox(props: UseListboxProps): UseListboxReturn;
function useListboxContext(): ListboxContext;
function useListboxItemContext(): ListboxItemContext;import {
useMenu,
useMenuContext,
useMenuItemContext,
} from "@chakra-ui/react";
function useMenu(props: UseMenuProps): UseMenuReturn;
function useMenuContext(): MenuContext;
function useMenuItemContext(): MenuItemContext;import { useNumberInput, useNumberInputContext } from "@chakra-ui/react";
function useNumberInput(props: UseNumberInputProps): UseNumberInputReturn;
function useNumberInputContext(): NumberInputContext;import { usePagination, usePaginationContext } from "@chakra-ui/react";
function usePagination(props: UsePaginationProps): UsePaginationReturn;
function usePaginationContext(): PaginationContext;import { usePinInput, usePinInputContext } from "@chakra-ui/react";
function usePinInput(props: UsePinInputProps): UsePinInputReturn;
function usePinInputContext(): PinInputContext;import { usePopover, usePopoverContext } from "@chakra-ui/react";
function usePopover(props: UsePopoverProps): UsePopoverReturn;
function usePopoverContext(): PopoverContext;import { useProgress, useProgressContext } from "@chakra-ui/react";
function useProgress(props: UseProgressProps): UseProgressReturn;
function useProgressContext(): ProgressContext;import { useQrCode, useQrCodeContext } from "@chakra-ui/react";
function useQrCode(props: UseQrCodeProps): UseQrCodeReturn;
function useQrCodeContext(): QrCodeContext;import {
useRadioGroup,
useRadioGroupContext,
useRadioGroupItemContext,
useRadioCardGroup,
useRadioCardContext,
useRadioCardItemContext,
} from "@chakra-ui/react";
function useRadioGroup(props: UseRadioGroupProps): UseRadioGroupReturn;
function useRadioGroupContext(): RadioGroupContext;
function useRadioGroupItemContext(): RadioGroupItemContext;import {
useRatingGroup,
useRatingGroupContext,
useRatingGroupItemContext,
} from "@chakra-ui/react";
function useRatingGroup(props: UseRatingGroupProps): UseRatingGroupReturn;
function useRatingGroupContext(): RatingGroupContext;
function useRatingGroupItemContext(): RatingGroupItemContext;import { useScrollArea, useScrollAreaContext } from "@chakra-ui/react";
function useScrollArea(props: UseScrollAreaProps): UseScrollAreaReturn;
function useScrollAreaContext(): ScrollAreaContext;import {
useSegmentGroup,
useSegmentGroupContext,
useSegmentGroupItemContext,
} from "@chakra-ui/react";
function useSegmentGroup(props: UseSegmentGroupProps): UseSegmentGroupReturn;
function useSegmentGroupContext(): SegmentGroupContext;
function useSegmentGroupItemContext(): SegmentGroupItemContext;import {
useSelect,
useSelectContext,
useSelectItemContext,
} from "@chakra-ui/react";
function useSelect(props: UseSelectProps): UseSelectReturn;
function useSelectContext(): SelectContext;
function useSelectItemContext(): SelectItemContext;import { useSlider, useSliderContext } from "@chakra-ui/react";
function useSlider(props: UseSliderProps): UseSliderReturn;
function useSliderContext(): SliderContext;import {
useSteps,
useStepsContext,
useStepsItemContext,
} from "@chakra-ui/react";
function useSteps(props: UseStepsProps): UseStepsReturn;
function useStepsContext(): StepsContext;
function useStepsItemContext(): StepsItemContext;import { useSwitch, useSwitchContext } from "@chakra-ui/react";
function useSwitch(props: UseSwitchProps): UseSwitchReturn;
function useSwitchContext(): SwitchContext;import { useTabs, useTabsContext } from "@chakra-ui/react";
function useTabs(props: UseTabsProps): UseTabsReturn;
function useTabsContext(): TabsContext;import { useToggle, useToggleContext } from "@chakra-ui/react";
function useToggle(props: UseToggleProps): UseToggleReturn;
function useToggleContext(): ToggleContext;import { useTooltip, useTooltipContext } from "@chakra-ui/react";
function useTooltip(props: UseTooltipProps): UseTooltipReturn;
function useTooltipContext(): TooltipContext;import {
useTreeView,
useTreeViewContext,
useTreeViewNodeContext,
} from "@chakra-ui/react";
function useTreeView(props: UseTreeViewProps): UseTreeViewReturn;
function useTreeViewContext(): TreeViewContext;
function useTreeViewNodeContext(): TreeViewNodeContext;All component hooks follow similar patterns:
useDialog, useDisclosure manage open/close stateuseDialogContext access component state from contextgetTriggerProps() that provide proper ARIA attributesExample Pattern:
const dialog = useDialog({ defaultOpen: false });
// Returns: { open, setOpen, getTriggerProps, getContentProps, ... }
// In nested components:
const dialogContext = useDialogContext();
// Accesses the same state as parent useDialogComponent style hooks provide access to resolved slot recipe styles for multi-part components. Each multi-part component exports a use[Component]Styles hook that returns the resolved styles for all component slots.
import {
useAccordionStyles,
useActionBarStyles,
useAlertStyles,
useAvatarStyles,
useBlockquoteStyles,
useBreadcrumbStyles,
useCardStyles,
useCheckboxCardStyles,
useCheckboxStyles,
useClipboardStyles,
useCollapsibleStyles,
useComboboxStyles,
useDataListStyles,
useDialogStyles,
useDrawerStyles,
useEditableStyles,
useEmptyStateStyles,
useFieldsetStyles,
useFieldStyles,
useFileUploadStyles,
useHoverCardStyles,
useListboxStyles,
useListStyles,
useMenuStyles,
useNativeSelectStyles,
useNumberInputStyles,
usePaginationStyles,
usePinInputStyles,
usePopoverStyles,
useProgressCircleStyles,
useProgressStyles,
useQrCodeStyles,
useRadioCardStyles,
useRadioGroupStyles,
useRatingGroupStyles,
useScrollAreaStyles,
useSegmentGroupStyles,
useSelectStyles,
useSliderStyles,
useStatStyles,
useStatusStyles,
useStepsStyles,
useSwitchStyles,
useTableStyles,
useTabsStyles,
useTagStyles,
useTimelineStyles,
useToastStyles,
useTooltipStyles,
useTreeViewStyles,
} from "@chakra-ui/react";
// Each hook returns resolved styles for component slots
// Example: Dialog component
function useDialogStyles(): {
backdrop: SystemStyleObject;
content: SystemStyleObject;
header: SystemStyleObject;
body: SystemStyleObject;
footer: SystemStyleObject;
closeTrigger: SystemStyleObject;
// ... other slots
};Usage Example:
import { useDialogStyles } from "@chakra-ui/react";
function CustomDialog() {
const styles = useDialogStyles();
// Access resolved styles for each slot
return (
<div style={styles.backdrop}>
<div style={styles.content}>
<div style={styles.header}>Title</div>
<div style={styles.body}>Content</div>
</div>
</div>
);
}These hooks are useful when building custom components that need to match Chakra UI's component styling or when creating wrapper components that need access to the resolved theme styles.
Install with Tessl CLI
npx tessl i tessl/npm-chakra-ui--react