[英]React Native bottom bar tab change route variable
您可以使用tabPress
侦听器并使用preventDefault
function 来阻止默认导航事件。 此外,使用 state 指示当前路线。 使用对NavigationContainer
的引用来导航到所需的屏幕。
这是一个最小的例子。
const Tab = createBottomTabNavigator();
const Stack = createStackNavigator();
export default function App() {
const navigationRef = React.useRef();
const [routeName, setRouteName] = React.useState('');
return (
<NavigationContainer
ref={navigationRef}
onReady={() => {
const currentRoute = navigationRef.current.getCurrentRoute();
setRouteName(currentRoute.name);
}}>
<Tab.Navigator>
<Tab.Screen
name="A"
component={StackA}
listeners={{
tabPress: (e) => {
e.preventDefault()
if (routeName === "ScreenA") {
setRouteName("ScreenA2");
navigationRef.current.navigate("ScreenA2")
} else if (routeName === "ScreenA2") {
setRouteName("ScreenA3");
navigationRef.current.navigate("ScreenA3")
} else {
setRouteName("ScreenA")
navigationRef.current.navigate("ScreenA")
}
},
}}
/>
</Tab.Navigator>
</NavigationContainer>
);
}
导航器和屏幕定义如下。
function ScreenA() {
return (
<View>
<Text>ScreenA</Text>
</View>
);
}
function ScreenA2() {
return (
<View>
<Text>ScreenA2</Text>
</View>
);
}
function ScreenA3() {
return (
<View>
<Text>ScreenA3</Text>
</View>
);
}
function StackA() {
return (
<Stack.Navigator>
<Stack.Screen name="ScreenA" component={ScreenA} />
<Stack.Screen name="ScreenA2" component={ScreenA2} />
<Stack.Screen name="ScreenA3" component={ScreenA3} />
</Stack.Navigator>
);
}
选项卡上的第一次按下将导航到ScreenA2
,第二次按下将导航到ScreenA3
,第三次按下将再次在ScreenA
上开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.