如何移动到底部选项卡抽屉中的不同屏幕而不在 React Native 的选项卡抽屉导航中注册?
How to move to different screen in bottom tab drawer without registering it in tab drawer navigation in React Native?
我正在创建一个 React Native 应用程序,我在其中使用底部选项卡抽屉,如附图所示。在这里的这个应用程序中,我只注册了四个屏幕,我有多个屏幕,比如 30 或 40 个,我无法在底部选项卡抽屉中注册它们,所以我只想要四个屏幕,每个屏幕内我想要多个屏幕。
现在让我们从 个人资料屏幕 开始,在我的个人资料屏幕中,我提供了一个按钮注册,它将让我进入注册屏幕,但是当我点击它时,它显示
The action 'JUMP_TO' with payload {"name":"RegisterScreen"} was not handled by any navigator.
Do you have a screen named 'RegisterScreen'?
If you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.
如何在配置文件选项卡中打开注册屏幕?
我的底部标签代码:
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
StyleSheet,
Text,
useColorScheme,
View,
} from 'react-native';
import HomeScreen from './Screens/HomeScreen';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import {createNativeStackNavigator} from "@react-navigation/native-stack"
import SettingsScreen from './Screens/SettingsScreen';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
import OrderScreen from './Screens/OrderScreen';
import ProfileScreen from './Screens/ProfileScreen';
import RegisterScreen from "./Screens/RegisterScreen"
import LoginScreen from './Screens/LoginScreen';
const Tab = createBottomTabNavigator();
const App= () => {
return (
<View style={styles.body}>
<NavigationContainer>
<Tab.Navigator
initialRouteName='MyApp'
screenOptions={{
tabBarActiveTintColor:"#E0FFFF",
tabBarActiveBackgroundColor:"#20B2AA"
}}
>
<Tab.Screen
name="Home"
component={HomeScreen}
options={{
tabBarLabel:"Home",
tabBarIcon:({color,size})=>(
<MaterialCommunityIcons name='home' color={"black"} size={30}/>
)
}}
/>
<Tab.Screen name="Settings" component={SettingsScreen} />
<Tab.Screen name="Order" component={OrderScreen} />
<Tab.Screen name="Profile" component={ProfileScreen}/>
</Tab.Navigator>
</NavigationContainer>
</View>
);
};
const styles = StyleSheet.create({
body:{
flex:1,
backgroundColor:"#fff"
}
});
export default App;
这是我的个人资料屏幕代码:
import React from 'react'
import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'
import LoginScreen from './LoginScreen'
import RegisterScreen from './RegisterScreen'
import {NavigationContainer, useNavigation} from "@react-navigation/native"
const ProfileScreen = ({navigation}) => {
// const navigation = useNavigation();
return (
<ScrollView>
<View style={styles.body}>
<View style={styles.tile}>
<View>
<Text style={{textAlign:"center",fontSize:20,fontWeight:"bold",color:"#000"}}>Your Accout</Text>
</View>
<View>
<Pressable
style={({pressd})=>[
{backgroundColor:pressd
? 'rgb(210,230,255)':
"red"
},{ margin:10}
]}
onPress={()=>{
navigation.jumpTo("RegisterScreen")
}}
>
<Text style={styles.registerButton}>Register</Text>
</Pressable>
</View>
</View>
<View style={styles.tile}>
</View>
<View style={styles.tile}>
</View>
<View style={styles.tile}>
</View>
</View>
</ScrollView>
)
}
const styles = StyleSheet.create({
body:{
flex:1,
},
tile:{
margin:5,
backgroundColor:"red",
borderRadius:10,
height:200,
},
register:{
justifyContent:"center"
},
registerButton:{
padding:15,
textAlign:"center",
width:100,
height:50,
borderRadius:10,
backgroundColor:"green",
fontWeight:"bold",
color:"black",
}
})
export default ProfileScreen
navigation.jumpTo() 仅适用于底部选项卡屏幕。试试 navigation.navigate()
基本上,您的个人资料选项卡本身必须是一个导航器,初始屏幕是个人资料屏幕,请在下面找到相同的代码,
import {createNativeStackNavigator} from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
const ProfileRoutes = () => {
return (
<Stack.Navigator>
<Stack.Screen name="Profile" component={ProfileScreen} />
<Stack.Screen name="Register" component={RegisterScreen} />
<Stack.Navigator />
}
在定义 Tab 路由时更改如下代码,
<Tab.Screen name="ProfileStack" component={ProfileRoutes}/>
在点击中,
navigation.navigate('Register');
我正在创建一个 React Native 应用程序,我在其中使用底部选项卡抽屉,如附图所示。在这里的这个应用程序中,我只注册了四个屏幕,我有多个屏幕,比如 30 或 40 个,我无法在底部选项卡抽屉中注册它们,所以我只想要四个屏幕,每个屏幕内我想要多个屏幕。
现在让我们从 个人资料屏幕 开始,在我的个人资料屏幕中,我提供了一个按钮注册,它将让我进入注册屏幕,但是当我点击它时,它显示
The action 'JUMP_TO' with payload {"name":"RegisterScreen"} was not handled by any navigator.
Do you have a screen named 'RegisterScreen'?
If you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.
如何在配置文件选项卡中打开注册屏幕?
我的底部标签代码:
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
StyleSheet,
Text,
useColorScheme,
View,
} from 'react-native';
import HomeScreen from './Screens/HomeScreen';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import {createNativeStackNavigator} from "@react-navigation/native-stack"
import SettingsScreen from './Screens/SettingsScreen';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
import OrderScreen from './Screens/OrderScreen';
import ProfileScreen from './Screens/ProfileScreen';
import RegisterScreen from "./Screens/RegisterScreen"
import LoginScreen from './Screens/LoginScreen';
const Tab = createBottomTabNavigator();
const App= () => {
return (
<View style={styles.body}>
<NavigationContainer>
<Tab.Navigator
initialRouteName='MyApp'
screenOptions={{
tabBarActiveTintColor:"#E0FFFF",
tabBarActiveBackgroundColor:"#20B2AA"
}}
>
<Tab.Screen
name="Home"
component={HomeScreen}
options={{
tabBarLabel:"Home",
tabBarIcon:({color,size})=>(
<MaterialCommunityIcons name='home' color={"black"} size={30}/>
)
}}
/>
<Tab.Screen name="Settings" component={SettingsScreen} />
<Tab.Screen name="Order" component={OrderScreen} />
<Tab.Screen name="Profile" component={ProfileScreen}/>
</Tab.Navigator>
</NavigationContainer>
</View>
);
};
const styles = StyleSheet.create({
body:{
flex:1,
backgroundColor:"#fff"
}
});
export default App;
这是我的个人资料屏幕代码:
import React from 'react'
import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'
import LoginScreen from './LoginScreen'
import RegisterScreen from './RegisterScreen'
import {NavigationContainer, useNavigation} from "@react-navigation/native"
const ProfileScreen = ({navigation}) => {
// const navigation = useNavigation();
return (
<ScrollView>
<View style={styles.body}>
<View style={styles.tile}>
<View>
<Text style={{textAlign:"center",fontSize:20,fontWeight:"bold",color:"#000"}}>Your Accout</Text>
</View>
<View>
<Pressable
style={({pressd})=>[
{backgroundColor:pressd
? 'rgb(210,230,255)':
"red"
},{ margin:10}
]}
onPress={()=>{
navigation.jumpTo("RegisterScreen")
}}
>
<Text style={styles.registerButton}>Register</Text>
</Pressable>
</View>
</View>
<View style={styles.tile}>
</View>
<View style={styles.tile}>
</View>
<View style={styles.tile}>
</View>
</View>
</ScrollView>
)
}
const styles = StyleSheet.create({
body:{
flex:1,
},
tile:{
margin:5,
backgroundColor:"red",
borderRadius:10,
height:200,
},
register:{
justifyContent:"center"
},
registerButton:{
padding:15,
textAlign:"center",
width:100,
height:50,
borderRadius:10,
backgroundColor:"green",
fontWeight:"bold",
color:"black",
}
})
export default ProfileScreen
navigation.jumpTo() 仅适用于底部选项卡屏幕。试试 navigation.navigate()
基本上,您的个人资料选项卡本身必须是一个导航器,初始屏幕是个人资料屏幕,请在下面找到相同的代码,
import {createNativeStackNavigator} from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
const ProfileRoutes = () => {
return (
<Stack.Navigator>
<Stack.Screen name="Profile" component={ProfileScreen} />
<Stack.Screen name="Register" component={RegisterScreen} />
<Stack.Navigator />
}
在定义 Tab 路由时更改如下代码,
<Tab.Screen name="ProfileStack" component={ProfileRoutes}/>
在点击中,
navigation.navigate('Register');