react-native 从入门到实战系列教程一底部导航及页面切换

avatar
作者
猴君
阅读量:0

react-native 里面的导航有点繁琐,需要引入 react-navigation 这个库。也是官网推荐的。整个过程不难,就是配置比较繁琐,还会因为网络的原因,时常报错,需要多试几次。排查错误,需要多看文档。安装完依赖,必须重启项目。

效果演示

请添加图片描述

实现步骤

  • 安装
npm i  @react-navigation/native npm i  @react-navigation/bottom-tabs 
  • 页面使用
import React, {useEffect, useState} from 'react'; import {NavigationContainer} from '@react-navigation/native'; import {createBottomTabNavigator} from '@react-navigation/bottom-tabs'; import Ionicons from 'react-native-vector-icons/Ionicons'; import {   StyleSheet,   Button,   View,   SafeAreaView,   Text,   Alert,   ActivityIndicator, } from 'react-native';  const Separator = () => <View style={styles.separator} />;  const Loading = () => (   <View style={styles.loadingContainer}>     <ActivityIndicator size="large" color="#0000ff" />     <Text>加载中...</Text>   </View> );  function HomeScreen() {   return (     <View       style={{         flex: 1,         justifyContent: 'center',         alignItems: 'center',         width: '100%',       }}>       <Text>Home!</Text>     </View>   ); }  function SettingsScreen() {   return (     <View       style={{         flex: 1,         justifyContent: 'center',         alignItems: 'center',         width: '100%',       }}>       <Text>Settings!</Text>     </View>   ); }  function UserCenter() {   return (     <View       style={{         flex: 1,         justifyContent: 'center',         alignItems: 'center',         width: '100%',       }}>       <Text>User Center</Text>     </View>   ); }  const Tab = createBottomTabNavigator();  const App = () => {   const [isLoading, setIsLoading] = useState(true);    const handleSubmit = () => {     Alert.alert(       '提交成功',       '您的信息已提交,我们会尽快与您联系!',       [{text: '好的'}],       {cancelable: false},     );   };   const handleSubmit2 = () => {     Alert.alert('提交成功', '您的信息已提交,请耐心等待!', [{text: '好的'}], {       cancelable: false,     });   };    useEffect(() => {     setTimeout(() => {       setIsLoading(false);     }, 3000);   });   return (     <SafeAreaView style={styles.container}>       {isLoading ? (         <Loading />       ) : (         <NavigationContainer>           <Tab.Navigator             screenOptions={({route}) => ({               tabBarIcon: ({focused, color, size}) => {                 let iconName;                 if (route.name === '消息') {                   iconName = focused                     ? 'chatbubble-ellipses-sharp'                     : 'chatbubble-outline';                 } else if (route.name === '工作台') {                   iconName = focused ? 'desktop' : 'desktop-outline';                 } else if (route.name === '我的') {                   iconName = focused                     ? 'person-circle'                     : 'person-circle-outline';                 }                  return <Ionicons name={iconName} size={size} color={color} />;               },               tabBarActiveTintColor: 'tomato',               tabBarInactiveTintColor: 'gray',             })}>             <Tab.Screen               name="消息"               component={HomeScreen}               options={{                 tabBarBadge: 3,               }}             />             <Tab.Screen name="工作台" component={SettingsScreen} />             <Tab.Screen name="我的" component={UserCenter} />           </Tab.Navigator>         </NavigationContainer>       )}     </SafeAreaView>   ); };  const styles = StyleSheet.create({   container: {     flex: 1,     width: '100%',     justifyContent: 'center',   },   loadingContainer: {     flex: 1,     justifyContent: 'center',     marginHorizontal: 16,     alignItems: 'center',   },   title: {     textAlign: 'center',     marginVertical: 8,   },   fixToText: {     flexDirection: 'row',     justifyContent: 'space-between',   },   separator: {     marginVertical: 8, //垂直距离     borderBottomColor: '#737373', //底部边框颜色     borderBottomWidth: StyleSheet.hairlineWidth, //底部边框宽度   },   tinyLogo: {     width: 50,     height: 50,   },   content: {     marginVertical: 16,     textAlign: 'left',   }, });  export default App; 

默认情境下,图标是展示的一个打叉的矩形,需要我们配置好图标,才能正常展示。

配置图标

  • 安装依赖
npm i react-native-vector-icons 
  • 配置图标
    我这里是安卓,请按照安卓的操作方法配置,https://www.npmjs.com/package/react-native-vector-icons
    在这里插入图片描述
    把安装包下面的字体文件夹改为小写,放到指定的位置
    在这里插入图片描述

    • 查找图标,要参考官方文档:https://oblador.github.io/react-native-vector-icons/#Ionicons
      在这里插入图片描述
  • 参考导航的使用方法。
    react-navigation 的官网: https://reactnavigation.org/docs/tab-based-navigation

这样我们就实现了一个导航效果,然后我们就可以继续丰富我们app的细节内容

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!