If you don't use React Navigation, you can use the TabView
component directly.
Each scene in the tab view is a separate component that represents a screen. You can define these components independently:
Then use SceneMap
to map route keys to scene components:
navigationState
State for the tab view. The state should contain:
routes
: Array of route objects containing key
and title
propsindex
: Current selected tab indexrenderScene
Function that returns a React element to render for the screen. Can be created using SceneMap
or custom render function.
onIndexChange
Callback that is called when the tab index changes.
labeled
Whether to show labels in tabs. When false
, only icons will be displayed.
boolean
true
false
sidebarAdaptable
A tab bar style that adapts to each platform:
disablePageAnimations
Whether to disable animations between tabs.
boolean
hapticFeedbackEnabled
Whether to enable haptic feedback on tab press.
boolean
false
tabLabelStyle
Object containing styles for the tab label. Supported properties:
fontFamily
fontSize
fontWeight
scrollEdgeAppearance
Appearance attributes for the tab bar when a scroll view is at the bottom.
'default' | 'opaque' | 'transparent'
minimizeBehavior
Controls how the tab bar behaves when content is scrolled.
'automatic' | 'onScrollDown' | 'onScrollUp' | 'never'
undefined
(uses system default)Options:
automatic
: Platform determines the behavioronScrollDown
: Tab bar minimizes when scrolling downonScrollUp
: Tab bar minimizes when scrolling upnever
: Tab bar never minimizesThis feature requires iOS 26.0 or later and is only available on iOS. On older versions, this prop is ignored.
tabBarActiveTintColor
Color for the active tab.
ColorValue
tabBarInactiveTintColor
Color for inactive tabs.
ColorValue
tabBarStyle
Object containing styles for the tab bar.
Supported properties:
backgroundColor
: Background color of the tab bar.translucent
Whether the tab bar is translucent.
boolean
activeIndicatorColor
Color of tab indicator.
ColorValue
Each route in the routes
array can have the following properties:
key
: Unique identifier for the routetitle
: Display title for the tabfocusedIcon
: Icon to show when tab is activeunfocusedIcon
: Icon to show when tab is inactive (optional)badge
: Badge text to display on the tabactiveTintColor
: Custom active tint color for this specific tablazy
: Whether to lazy load this tab's contentfreezeOnBlur
: Whether to freeze the tab's content when it's not visiblerole
: A value that defines the purpose of the tabgetLazy
Function to determine if a screen should be lazy loaded.
route.lazy
getLabelText
Function to get the label text for a tab.
route.title
getBadge
Function to get the badge text for a tab.
route.badge
To display a badge without text (just a dot), you need to pass a string with a space character (" "
).
getActiveTintColor
Function to get the active tint color for a tab.
route.activeTintColor
getIcon
Function to get the icon for a tab.
route.focusedIcon
and route.unfocusedIcon
getHidden
Function to determine if a tab should be hidden.
route.hidden
getTestID
Function to get the test ID for a tab item.
route.testID
getRole
Function to get the role for a tab item.
route.role