Tabs
A component for toggling between related panels on the same page.
Workspace stats and activity.
Anatomy
Import the component and assemble its parts:
Examples
Animated panels
Animate panels as they activate using the data-starting-style and data-ending-style attributes.
The data-activation-direction attribute indicates which direction the newly active tab is relative to the previously active one, letting panels slide in from the correct side.
Workspace stats and activity.
Links
Use the render prop and set nativeButton={false} on <Tabs.Tab> to render tabs as anchor elements.
API reference
Root
Groups the tabs and the corresponding panels.
Renders a <div> element.
defaultValueTabs.Tab.Value0
- Name
- Description
The default value. Use when the component is not controlled. When the value is
null, no Tab will be active.- Type
- Default
0
valueTabs.Tab.Value—
- Name
- Description
The value of the currently active
Tab. Use when the component is controlled. When the value isnull, no Tab will be active.- Type
onValueChangefunction—
- Name
- Description
Callback invoked when new value is being set.
The event
reasonis'none'for user-initiated changes, such as a click or keyboard navigation;'initial'for the first automatic selection or fallback in uncontrolled roots whendefaultValueis omitted orundefined, including when the implicit initial value is disabled or missing;'disabled'for automatic fallback when the selected tab becomes disabled in uncontrolled roots; or'missing'for automatic fallback when the selected tab is removed, or when an explicitdefaultValuenever matches a mounted tab in uncontrolled roots.For automatic changes, the selected value can be
nullwhen no enabled Tab is available as a fallback.Automatic changes cannot be canceled; calling
eventDetails.cancel()for'initial','disabled', or'missing'has no effect.- Type
orientationTabs.Root.Orientation'horizontal'
- Name
- Description
The component orientation (layout flow direction).
- Type
- Default
'horizontal'
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
Tabs.Root.StateHide
Tabs.Root.ChangeEventReasonHide
Tabs.Root.ChangeEventDetailsHide
Tabs.Root.OrientationHide
List
Groups the individual tab buttons.
Renders a <div> element.
activateOnFocusbooleanfalse
- Name
- Description
Whether to automatically change the active tab on arrow key focus. Otherwise, tabs will be activated using Enter or Space key press.
- Type
- Default
false
loopFocusbooleantrue
- Name
- Description
Whether to loop keyboard focus back to the first item when the end of the list is reached while using the arrow keys.
- Type
- Default
true
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
Tabs.List.StateHide
Tab
An individual interactive tab button that toggles the corresponding panel.
Renders a <button> element.
value*Tabs.Tab.Value—
- Name
- Description
The value of the Tab.
- Type
nativeButtonbooleantrue
- Name
- Description
Whether the component renders a native
<button>element when replacing it via therenderprop. Set tofalseif the rendered element is not a button (for example,<div>).- Type
- Default
true
disabledboolean—
- Name
- Description
Whether the Tab is disabled.
If a first Tab on a
<Tabs.List>is disabled, it won’t initially be selected. Instead, the next enabled Tab will be selected. However, it does not work like this during server-side rendering, as it is not known during pre-rendering which Tabs are disabled. To work around it, ensure thatdefaultValueorvalueon<Tabs.Root>is set to an enabled Tab’s value.- Type
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
Tabs.Tab.StateHide
Tabs.Tab.ValueHide
Tabs.Tab.ActivationDirectionHide
Tabs.Tab.MetadataHide
Tabs.Tab.PositionHide
Tabs.Tab.SizeHide
Indicator
A visual indicator that can be styled to match the position of the currently active tab.
Renders a <span> element.
renderBeforeHydrationbooleanfalse
- Description
Whether to render itself before React hydrates. This minimizes the time that the indicator isn’t visible after server-side rendering.
- Type
- Default
false
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
Tabs.Indicator.StateHide
Panel
A panel displayed when the corresponding tab is active.
Renders a <div> element.
value*Tabs.Tab.Value—
- Name
- Description
The value of the TabPanel. It will be shown when the Tab with the corresponding value is active.
- Type
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
keepMountedbooleanfalse
- Name
- Description
Whether to keep the HTML element in the DOM while the panel is hidden.
- Type
- Default
false
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type