如何使用 navigation.navigate -react native 在深度嵌套的导航器中设置特定屏幕
How to set a specific screen in deeply nested navigator with navigation.navigate -react native
在 StackScreen 组件中,您可以看到按钮导航到深度嵌套的导航器 MyMatches,这是一个 TopTab 导航器。如果我按下 StackScreen 组件中的按钮,默认情况下会打开 MyMatches1 屏幕,因为它首先在 MyMatchesTopTabNavigator 中提到。但是,如果我想在按下按钮时打开 MyMatches2 屏幕怎么办?
我无法进一步选择儿童屏幕。请帮助。
这是演示 link。下载 Expo 以查看演示
https://snack.expo.io/3h_Sv-Izw
const Tab = createMaterialTopTabNavigator();
const Stack = createStackNavigator();
const BottomTab = createBottomTabNavigator();
const MyMatchesListScreen = ({route, navigation}) => {
return (
<View style={styles.matchesListContainer}>
<Text>My Matches List</Text>
</View>
);
};
const MatchesListScreen = ({route, navigation}) => {
return (
<View style={styles.matchesListContainer}>
<Text>Matches List</Text>
</View>
);
};
const StackScreen = ({route, navigation}) => {
return (
<View style={styles.matchesListContainer}>
<Text>Stack Screen</Text>
**
<Button
title="Go to stack Screen"
onPress={() => {
navigation.navigate('MyTabs', {screen: 'MyMatches'});
}}
/>
**
</View>
);
};
function MatchesTopTabNavigator() {
return (
<Tab.Navigator>
<Tab.Screen name="Matches1" component={MatchesListScreen} />
<Tab.Screen name="Matches2" component={MatchesListScreen} />
</Tab.Navigator>
);
}
function MyMatchesTopTabNavigator() {
return (
<Tab.Navigator>
<Tab.Screen name="MyMatches1" component={MyMatchesListScreen} />
<Tab.Screen name="MyMatches2" component={MyMatchesListScreen} />
</Tab.Navigator>
);
}
function HomeBottomNavigator() {
return (
<BottomTab.Navigator>
<Tab.Screen name="Matches" component={MatchesTopTabNavigator} />
<Tab.Screen name="MyMatches" component={MyMatchesTopTabNavigator} />
</BottomTab.Navigator>
);
}
function StackNavigator() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="StackScreen" component={StackScreen} />
<Stack.Screen name="MyTabs" component={HomeBottomNavigator} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default function App() {
return (
<View style={styles.container}>
<StackNavigator />
</View>
);
}
const styles = StyleSheet.create({
container: {
paddingTop: 20,
height: '100%',
width: '100%',
flex: 1,
},
matchesListContainer: {
height: '100%',
width: '100%',
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
有点晚了,但是对于那些来这里的人:
navigation.navigate('MyTabs', {
screen: 'MyMatches',
params: {
screen: 'MyMatches2',
params: {
param1: '',
},
},
})
在 StackScreen 组件中,您可以看到按钮导航到深度嵌套的导航器 MyMatches,这是一个 TopTab 导航器。如果我按下 StackScreen 组件中的按钮,默认情况下会打开 MyMatches1 屏幕,因为它首先在 MyMatchesTopTabNavigator 中提到。但是,如果我想在按下按钮时打开 MyMatches2 屏幕怎么办? 我无法进一步选择儿童屏幕。请帮助。
这是演示 link。下载 Expo 以查看演示 https://snack.expo.io/3h_Sv-Izw
const Tab = createMaterialTopTabNavigator();
const Stack = createStackNavigator();
const BottomTab = createBottomTabNavigator();
const MyMatchesListScreen = ({route, navigation}) => {
return (
<View style={styles.matchesListContainer}>
<Text>My Matches List</Text>
</View>
);
};
const MatchesListScreen = ({route, navigation}) => {
return (
<View style={styles.matchesListContainer}>
<Text>Matches List</Text>
</View>
);
};
const StackScreen = ({route, navigation}) => {
return (
<View style={styles.matchesListContainer}>
<Text>Stack Screen</Text>
**
<Button
title="Go to stack Screen"
onPress={() => {
navigation.navigate('MyTabs', {screen: 'MyMatches'});
}}
/>
**
</View>
);
};
function MatchesTopTabNavigator() {
return (
<Tab.Navigator>
<Tab.Screen name="Matches1" component={MatchesListScreen} />
<Tab.Screen name="Matches2" component={MatchesListScreen} />
</Tab.Navigator>
);
}
function MyMatchesTopTabNavigator() {
return (
<Tab.Navigator>
<Tab.Screen name="MyMatches1" component={MyMatchesListScreen} />
<Tab.Screen name="MyMatches2" component={MyMatchesListScreen} />
</Tab.Navigator>
);
}
function HomeBottomNavigator() {
return (
<BottomTab.Navigator>
<Tab.Screen name="Matches" component={MatchesTopTabNavigator} />
<Tab.Screen name="MyMatches" component={MyMatchesTopTabNavigator} />
</BottomTab.Navigator>
);
}
function StackNavigator() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="StackScreen" component={StackScreen} />
<Stack.Screen name="MyTabs" component={HomeBottomNavigator} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default function App() {
return (
<View style={styles.container}>
<StackNavigator />
</View>
);
}
const styles = StyleSheet.create({
container: {
paddingTop: 20,
height: '100%',
width: '100%',
flex: 1,
},
matchesListContainer: {
height: '100%',
width: '100%',
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
有点晚了,但是对于那些来这里的人:
navigation.navigate('MyTabs', {
screen: 'MyMatches',
params: {
screen: 'MyMatches2',
params: {
param1: '',
},
},
})