• 【iOS开发】(六)react Native 路由嵌套传参与框架原理(完)20240423


    【iOS开发】(六)react Native 路由嵌套传参与框架原理(完)20240423
    感谢拉钩教育的教学。

    (五)我们介绍了四种路由导航,这一节我们介绍他们的嵌套传参和框架的整体原理。到这里,大家已经能用RN框架进行一些小项目的开发了。

    一 路由嵌套

    import {Text, StyleSheet, View, Button} from 'react-native';
    import React, {Component} from 'react';
    import {createStackNavigator} from '@react-navigation/stack';
    import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
    import { NavigationContainer } from '@react-navigation/native';
    
    const Tab = createBottomTabNavigator();
    
    function FeedScreen(props) {
      // 跳转方法prop.navigation.navigate参数是路由名称也就是Stack.Screen name
      return (
        <View style={[styles.container]}>
          <Text style={[styles.text]}>HomeScreen</Text>
          <Button
            title={'跳到Profile页面'}
            onPress={() => props.navigation.navigate('Profile')}
          />
          <Button
            title={'跳到Settings页面'}
            onPress={() => props.navigation.navigate('Settings')}
          />
        </View>
      );
    }
    
    function MessagesScreen(props) {
      return (
        <View style={[styles.container]}>
          <Text style={[styles.text]}>NewsScreen</Text>
        </View>
      );
    }
    
    function ProfileScreen(props) {
      return (
        <View style={[styles.container]}>
          <Text style={[styles.text]}>ProfileScreen</Text>
        </View>
      );
    }
    
    function SettingsScreen(props) {
      return (
        <View style={[styles.container]}>
          <Text style={[styles.text]}>SettingsScreen</Text>
        </View>
      );
    }
    
    function Home() {
      return (
        <Tab.Navigator>
          <Tab.Screen name="Feed" component={FeedScreen} />
          <Tab.Screen name="Messages" component={MessagesScreen} />
        </Tab.Navigator>
      );
    }
    
    const Stack = createStackNavigator();
    
    export default class Index extends Component {
      render() {
        return (
          <NavigationContainer>
          <Stack.Navigator>
            <Stack.Screen
              name="Home"
              component={Home}
              options={{headerShown: false}}
            />
            <Stack.Screen name="Profile" component={ProfileScreen} />
            <Stack.Screen name="Settings" component={SettingsScreen} />
          </Stack.Navigator>
          </NavigationContainer>
        );
      }
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
      },
      text: {
        fontSize: 40,
      },
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    在这里插入图片描述

    二 路由传参

    import {Text, View, Button} from 'react-native';
    import React from 'react';
    import {createStackNavigator} from '@react-navigation/stack';
    import {NavigationContainer} from '@react-navigation/native'; 
     // 导入 NavigationContainer
    
    function HomeScreen({navigation}) {
      return (
        <View style={{flex: 1, alignItems: 'center', justifyContent: 'center'}}>
          <Text>首页</Text>
          <Button
            title="前往详情"
            onPress={() => {
              navigation.navigate('Details', {
                itemId: 86,
                otherParam: '这里可以是任何你想要的内容',
              });
            }}
          />
        </View>
      );
    }
    
    function DetailsScreen({route, navigation}) {
      const {itemId, otherParam} = route.params;
      return (
        <View style={{flex: 1, alignItems: 'center', justifyContent: 'center'}}>
          <Text>详情页</Text>
          <Text>itemId: {JSON.stringify(itemId)}</Text>
          <Text>otherParam: {JSON.stringify(otherParam)}</Text>
          <Button
            title="再次前往详情"
            onPress={() =>
              navigation.push('Details', {
                itemId: Math.floor(Math.random() * 100),
              })
            }
          />
          <Button title="返回首页" onPress={() => navigation.navigate('Home')} />
          <Button title="返回" onPress={() => navigation.goBack()} />
        </View>
      );
    }
    
    const Stack = createStackNavigator();
    
    export default function Index() {
      return (
        <NavigationContainer> 
          <Stack.Navigator>
            <Stack.Screen name="Home" component={HomeScreen} />
            <Stack.Screen name="Details" component={DetailsScreen} />
          </Stack.Navigator>
        </NavigationContainer>
      );
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    在这里插入图片描述

    三 架构原理

    从启动过程,来理解架构设计
    在这里插入图片描述

  • 相关阅读:
    android 开机动画制作
    基于QtGUI的宠物小精灵对战游戏设计
    零基础入门MATLAB(一篇十分钟)
    关于前后端分离的项目打包方案docker
    Python中定义Mittag-Leffler函数
    如何使用JavaScript实现多语言处理
    day34 集合总结
    【web-攻击应用程序框架】(12.1)分层架构:攻击与保障
    大数据组件系列-Hadoop每日小问
    day072:UDP协议发送数据、接收数据(DatagramSocket、DatagramPacket);TCP协议发送数据、接收数据(Socket、ServerSocket)
  • 原文地址:https://blog.csdn.net/qq_53433382/article/details/138153461