在我的 中BottomTabNavigator,我有一个概述选项卡。当我单击它时,它会显示概述选项卡的初始路线。从这里,我可以点击查看更多详细信息。这将路由到不同的屏幕。我们称之为(B)
我的问题是,如果我位于“概述”选项卡内的此路线/页面 (B),然后我单击另一个选项卡,然后返回“概述”,它会显示路线/页面 (B),但是我希望它显示路线/页面( A)如果我更改一个选项卡并返回它。
我怎样才能做到这一点?
这是我的 OverviewStack.js
import OverviewStack from "./overviewStack";
import { createStackNavigator } from "react-navigation";
.
.
.
const OverviewStack = createStackNavigator(
{
...OverviewRoutes,
},
{
initialRouteName: "Overview",
resetOnBlur: true,
navigationOptions: ({ navigation }) => ({
...SharedHeader(navigation),
}),
}
);
Run Code Online (Sandbox Code Playgroud)
tabNavigator.js
import { createBottomTabNavigator } from "react-navigation";
.
.
.
export default createBottomTabNavigator(
{
Overview: {
resetOnBlur: true,
screen: OverviewStack,
navigationOptions: {
title: "Home",
},
},
Averages: {
resetOnBlur: true,
screen: TrackStack,
navigationOptions: {
title: "Track",
},
},
Run Code Online (Sandbox Code Playgroud)
resetOnBlur在最新(版本 5.x)React Navigation 中不可用。unmountOnBlur它已被弃用,并引入了新的类似功能选项。
在这里,我为您制作了世博小吃:https ://snack.expo.io/@nishantatthatmate/vigorous-peanut
import * as React from 'react';
import { Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { createStackNavigator, StackActions } from '@react-navigation/stack';
import { Link } from '@react-navigation/native';
const Stack = createStackNavigator();
function OverviewStack() {
return (
<Stack.Navigator>
<Stack.Screen name="OverviewScreen" component={OverviewScreen} />
<Stack.Screen name="DetailScreen" component={DetailScreen} />
</Stack.Navigator>
);
}
function HomeScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home!</Text>
</View>
);
}
function OverviewScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Overview!</Text>
<Link to="/DetailScreen" style={{color:'blue'}}>Go to Detail</Link>
</View>
);
}
function DetailScreen() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Detail!</Text>
</View>
);
}
const Tab = createBottomTabNavigator();
function MyTabs() {
return (
<Tab.Navigator >
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Overview" component={OverviewStack} options={{unmountOnBlur: true}} />
</Tab.Navigator>
);
}
export default function App() {
return (
<NavigationContainer>
<MyTabs />
</NavigationContainer>
);
}
Run Code Online (Sandbox Code Playgroud)
如果您注意到,我正在为我们想要在模糊时卸载的屏幕设置选项unmountOnBlur: true。
这样做的一个可能不受欢迎的副作用是,如果您位于“概述”选项卡下的“详细信息屏幕”上,并且您碰巧再次点击“概述”选项卡,它会将您带回到“概述屏幕”(因为弹出了“详细信息屏幕”)。这可能是也可能不是您预期的用户体验。但是,还有另一种方法可以通过监听各种事件来自定义行为,Tab.Screen如下所述。
如果你想变得更奇特,你可以添加一个监听器Tab.Screen并做更多涉及的事情,请参见这里: https: //reactnavigation.org/docs/navigation-events/#listeners-prop-on-screen
<Tab.Screen
name="Chat"
component={Chat}
listeners={({ navigation, route }) => ({
tabPress: e => {
// Prevent default action
e.preventDefault();
// Do something with the `navigation` object
navigation.navigate('AnotherPlace');
},
blur: () => {
// Do things here
},
})}
/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |