Library
/
Disclosure
/
Tabs
Tabs are a set of layered sections of content—known as tab panels that are displayed one at a time. They facilitate the organization and navigation between sets of content that share a connection and exist at a similar level of hierarchy.
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
),
rx.tabs.content(
rx.text("item on tab 1"),
value="tab1",
),
rx.tabs.content(
rx.text("item on tab 2"),
value="tab2",
),
)
The tabs
component is made up of a rx.tabs.root
which groups rx.tabs.list
and rx.tabs.content
parts.
We use the default_value
prop to set a default active tab, this will select the specified tab by default.
item on tab 2
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
),
rx.tabs.content(
rx.text("item on tab 1"),
value="tab1",
),
rx.tabs.content(
rx.text("item on tab 2"),
value="tab2",
),
default_value="tab2",
)
We use orientation
prop to set the orientation of the tabs component to vertical
or horizontal
. By default, the orientation
will be set to horizontal
. Note that, the orientation prop wont change the visual orientation but the
functional orientation. This means for vertical orientation, the up and down arrow keys moves focus between the next or previous tab,
while for horizontal orientation, the left and right arrow keys moves focus between tabs.
item on tab 1
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
),
rx.tabs.content(
rx.text("item on tab 1"),
value="tab1",
),
rx.tabs.content(
rx.text("item on tab 2"),
value="tab2",
),
default_value="tab1",
orientation="vertical",
)
item on tab 1
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
),
rx.tabs.content(
rx.text("item on tab 1"),
value="tab1",
),
rx.tabs.content(
rx.text("item on tab 2"),
value="tab2",
),
default_value="tab1",
orientation="horizontal",
)
We use the value
prop to specify the controlled value of the tab that we want to activate. This property should be used in conjunction with the on_change
event argument.
tab1 clicked !
items on tab 1
class TabsState(rx.State):
"""The app state."""
value = "tab1"
tab_selected = ""
def change_value(self, val):
self.tab_selected = f"{val} clicked!"
self.value = val
def index() -> rx.Component:
return rx.container(
rx.flex(
rx.text(f"{TabsState.value} clicked !"),
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
),
rx.tabs.content(
rx.text("items on tab 1"),
value="tab1",
),
rx.tabs.content(
rx.text("items on tab 2"),
value="tab2",
),
default_value="tab1",
value=TabsState.value,
on_change=lambda x: TabsState.change_value(
x
),
),
direction="column",
spacing="2",
),
padding="2em",
font_size="2em",
text_align="center",
)
The Tablist is used to list the respective tabs to the tab component
This is the button that activates the tab's associated content. It is typically used in the Tablist
We use the value
prop to assign a unique value that associates the trigger with content.
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
rx.tabs.trigger("Tab 3", value="tab3"),
),
)
We use the disabled
prop to disable the tab.
rx.tabs.root(
rx.tabs.list(
rx.tabs.trigger("Tab 1", value="tab1"),
rx.tabs.trigger("Tab 2", value="tab2"),
rx.tabs.trigger(
"Tab 3", value="tab3", disabled=True
),
),
)
Contains the content associated with each trigger.
We use the value
prop to assign a unique value that associates the content with a trigger.
rx.tabs.root( rx.tabs.list( rx.tabs.trigger("Tab 1", value="tab1"), rx.tabs.trigger("Tab 2", value="tab2"), ), rx.tabs.content( rx.text("item on tab 1"), value="tab1", ), rx.tabs.content( rx.text("item on tab 2"), value="tab2", ), default_value="tab1", orientation="vertical", )
Contains the triggers that sit alongside the active content.
The button that activates its associated content.
Contains the content associated with each trigger.
Did you find this useful?