Компонентом панели вкладок по умолчанию в Reaction-native-router-flux является только компонент из библиотеки react-navigation-tabs
.Вы можете импортировать этот компонент непосредственно в свой код, настроить его по мере необходимости, а затем передать его в react-native-router-flux
через tabBarComponent
prop ( задокументировано здесь ).
Я создал новый компонент, который вы должны быть в состоянии скопировать напрямую и просто изменить логику для фактического скрытия вкладок в зависимости от вашего состояния:
import React from 'react'
import { BottomTabBar } from 'react-navigation-tabs'
import { View, TouchableWithoutFeedback } from 'react-native'
import { connect } from 'react-redux'
const HiddenView = () => <View style={{ display: 'none' }} />
const TouchableWithoutFeedbackWrapper = ({
onPress,
onLongPress,
testID,
accessibilityLabel,
...props
}) => (
<TouchableWithoutFeedback
onPress={onPress}
onLongPress={onLongPress}
testID={testID}
hitSlop={{
left: 15,
right: 15,
top: 5,
bottom: 5,
}}
accessibilityLabel={accessibilityLabel}
>
<View {...props} />
</TouchableWithoutFeedback>
)
const TabBarComponent = props => (
<BottomTabBar
{...props}
getButtonComponent={({ route }) => {
if (
(route.key === 'newTab' && !props.showNewTab) ||
(route.key === 'oldTab' && props.hideOldTab)
) {
return HiddenView
}
return TouchableWithoutFeedbackWrapper
}}
/>
)
export default connect(
state => ({ /* state that you need */ }),
{},
)(TabBarComponent)
А затем просто импортировать и использовать это в моем компоненте вкладок:
<Tabs
key="main"
tabBarComponent={TabBarComponent} // the component defined above
...
Подробно рассмотрим, куда эти вещи передаются
Глядя на строку источника response-native-router-flux, этоиспользуя createBottomTabNavigator
из библиотеки react-navigation
и не передавая ни одного компонента, если вы не передаете пользовательский tabBarComponent.Метод createBottomTabNavigator
в react-navigation
происходит из из этой строки библиотеки и фактически определяется в react-navigation-tabs
.Теперь мы можем здесь увидеть в react-navigation-tabs
, что, если tabBarComponent не был передан, он просто использует BottomTabBar, также определенный в react-navigation-tabs
.Этот BottomTabBar
, в свою очередь, принимает пользовательский рендеринг кнопок с вкладками через реквизит , называемый getButtonComponent
.