• react-native导航


    创建navigation文件夹,创建bottomTab.tsx文件

     1 import React from 'react'
     2 import { RouteProp, TabNavigationState } from '@react-navigation/native';
     3 import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
     4 import Home from '@/pages/home'
     5 import Listen from '@/pages/listen'
     6 import Found from '@/pages/found'
     7 import Account from '@/pages/account'
     8 import { stackParamsList } from '@/navigator/createStackNavigation'
     9 import { StackNavigationProp } from '@react-navigation/stack';
    10 import { navigationProp } from '@/navigator/createStackNavigation'
    11 type bottomParamsList = {
    12     Home: undefined;
    13     Listen: undefined;
    14     Found: undefined;
    15     Account: undefined;
    16 }
    17 // type navigationProp=StackNavigationProp<bottomParamsList>
    18 const Tab = createBottomTabNavigator<bottomParamsList>();
    19 type Route = RouteProp<stackParamsList, 'BottomTab'> & {
    20     state?: TabNavigationState;
    21 }
    22 interface Iprops {
    23     route: Route,
    24     navigation: navigationProp
    25 }
    26 function getHeaderTitle(route: Route) {
    27     const routeName = route.state ? route.state.routes[route.state.index].name : route.params?.screen || 'Home'
    28     switch (routeName) {
    29         case 'Home':
    30             return '首页';
    31         case 'Listen':
    32             return '我听';
    33         case 'Found':
    34             return '发现';
    35         case 'Account':
    36             return '账户';
    37         default:
    38             return '首页'
    39     }
    40 }
    41 class BottomTab extends React.Component<Iprops>{
    42 
    43     componentDidUpdate() {
    44         const { route, navigation } = this.props
    45         console.log(route)
    46         navigation.setOptions({
    47             headerTitle: getHeaderTitle(route)
    48         })
    49     }
    50     render() {
    51         return (
    52             <Tab.Navigator
    53                 tabBarOptions={{
    54                     activeTintColor:'orange'
    55                 }}
    56                 >
    57                 <Tab.Screen
    58                     name="Home"
    59                     component={Home}
    60                     options={{
    61                         tabBarLabel: '首页'
    62                     }} />
    63                 <Tab.Screen
    64                     name="Listen"
    65                     component={Listen}
    66                     options={{
    67                         tabBarLabel: '我听'
    68                     }} />
    69                 <Tab.Screen
    70                     name="Found"
    71                     component={Found}
    72                     options={{
    73                         tabBarLabel: '发现'
    74                     }} />
    75                 <Tab.Screen
    76                     name="Account"
    77                     component={Account}
    78                     options={{
    79                         tabBarLabel: "账户"
    80                     }} />
    81             </Tab.Navigator>
    82         )
    83     }
    84 }
    85 export default BottomTab

    index.tsx

     1 import React from 'react'
     2 import { NavigationContainer } from '@react-navigation/native';
     3 import { createStackNavigator,StackNavigationProp, CardStyleInterpolators } from '@react-navigation/stack';
     4 import Detail from '@/pages/detail'
     5 import { StyleSheet ,Platform} from 'react-native';
     6 import BottomTab from '@/navigator/bottomTab'
     7 export type stackParamsList={
     8     BottomTab:{
     9         screen?:string
    10     };
    11     Detail:{
    12         id:number
    13     };
    14 }
    15 export type navigationProp=StackNavigationProp<stackParamsList>
    16 const Stack=createStackNavigator<stackParamsList>()
    17 function CreateStack(){
    18     return (
    19         <NavigationContainer>
    20             <Stack.Navigator
    21                 screenOptions={{
    22                     headerTitleAlign:'center',
    23                     cardStyleInterpolator:CardStyleInterpolators.forHorizontalIOS,
    24                     gestureEnabled:true,
    25                     gestureDirection:"horizontal",
    26                     headerStyle:{
    27                         ...Platform.select({
    28                             android:{
    29                                 elevation:0,
    30                                 borderBottom:StyleSheet.hairlineWidth
    31                             }
    32                         })
    33                     }
    34                 }}
    35             >
    36                 <Stack.Screen name="BottomTab" options={{
    37                     headerTitle:'首页'
    38                 }} component={BottomTab}/>
    39                 <Stack.Screen name="Detail" component={Detail}/>
    40             </Stack.Navigator>
    41         </NavigationContainer>
    42     )
    43 }
    44 export default CreateStack
  • 相关阅读:
    JS 创建对象的几种方式
    JS跨域笔记
    HTML5随笔
    css3随笔
    CSS3最简洁的轮播图
    canvas createRadialGradient 用法
    git 初级
    Oracle数据库字符集与国家字符集
    连接Oracle 19c出现ORA-28040:没有匹配的验证协议
    Vmware workstation虚拟机导入到esxi虚拟机
  • 原文地址:https://www.cnblogs.com/studyWeb/p/13065390.html
Copyright © 2020-2023  润新知