从 'react' 导入 React 从'@react-navigation/native'导入{NavigationContainer} 从 './navigation/GuestNavigator' 导入 GuestNavigator 从 './navigation/AppNavigator' 导入 AppNavigator const App = () =>; { const isUserAuthenticated = false; 返回 ( <导航容器> {用户已验证吗? (<p><strong>---这是访客模式的导航---</strong></p> <p>---- GuestNavigator.JS -------</p> <pre class="brush:php;toolbar:false;">从 '@react-navigation/bottom-tabs' 导入 { createBottomTabNavigator }; 从 '../components/TabBar' 导入 TabBar; const Tab = createBottomTabNavigator(); const GuestNavigator = ({ handleLogin }) =>; { 返回 (> ) : ( > )} </导航容器> ) } 导出默认应用程序
------ AppNavigator.JS ---------
<pre class="brush:php;toolbar:false;">从 '@react-navigation/bottom-tabs' 导入 { createBottomTabNavigator }; 从 '../components/TabBar' 导入 TabBar; const Tab = createBottomTabNavigator(); const AppNavigator = () =>; { 返回 (从 'react' 导入 React 从'@react-navigation/native'导入{NavigationContainer} 从 '@react-navigation/stack' 导入 { createStackNavigator } 从 '../screens/AuthScreens/LoginScreen' 导入 LoginScreen 从 '../screens/AuthScreens/RegisterScreen' 导入 RegisterScreen const Stack = createStackNavigator() const AuthNavigator = () =>; { 返回 ( <导航容器>; <p>当然,如果我从GuestNavigator导航中删除LoginScrein,我会得到错误:</p> <p><strong>错误:未处理任何导航器的负载为{"name":"Login"}的动作'NAVIGATE'。 是否有名为“登录”的屏幕? 如果您尝试导航到跳转导航器中的屏幕,请参阅https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator。 这只是一个开发时的警告,不会在生产中显示。</strong></p> <p>我还显示了 TabBar,尽管它显示了图标,但这些屏幕没有添加。----- TabBar.js -----------</p><堆栈屏幕 名称=“登录” 组件={登录屏幕} 选项={{ 标头显示:假, }} >> <堆栈屏幕 名称=“注册” 组件={注册屏幕} 选项={{ 标题:“注册”, }} >> </Stack.Navigator> </导航容器> ) } 导出默认 AuthNavigator
从 'react' 导入 React;
从 'react-native' 导入 { View, TouchableOpacity, Text };
从“react-native-vector-icons/Ionicons”导入图标;
const TabBar = ({ 状态, 描述符, 导航, isUserAuthenticated }) =>; {
返回 (
<视图样式={{ flexDirection: 'row', height: 60, backgroundColor: '#F3F9F5' }}>
{state.routes.map((路线,索引) => {
const { 选项 } = 描述符[route.key];
const onPress = () =>; {
const 事件 = navigation.emit({
类型:'tabPress',
目标:路线.key,
});
if (!event.defaultPrevented) {
导航.navigate(路线.名称);
}
};
const isFocused = state.index === 索引;
常量颜色= isFocused ? '#08A438' : '黑色';
让图标名称;
if (!isUserAuthenticated) {
// 邀请时尚图标
if (route.name === '家') {
图标名称 = '家';
} else if (route.name === 'SampleNotas') {
图标名称 = '列表';
} else if (route.name === 'SampleCuras') {
图标名称 = 'medkit';
} else if (route.name === 'SamplePerfil') {
图标名称 = '人物';
}
} 别的 {
// 验证方式图标
if (route.name === 'Notas') {
图标名称 = '注释';
} else if (route.name === 'Curas') {
图标名称 = 'medkit';
} else if (route.name === 'Recordatorios') {
图标名称 = '闹钟';
} else if (route.name === '个人资料') {
图标名称 = '人物';
}
}
返回 (
<可触摸不透明度
键={索引}
onPress={onPress}
样式={{ flex: 1,alignItems: 'center', justifyContent: 'center' }}
>
<</code></pre>
要解决这个问题,请像这样将Guestnavigator添加到AuthNavigator中:
将
App.js
重构为:并且不要忘记从
GuestNavigator
中移除登录选项卡。