美文网首页前端技术前端知识
【React Native 极速指南】进阶篇

【React Native 极速指南】进阶篇

作者: 一俢 | 来源:发表于2019-04-27 09:38 被阅读21次

    这篇文章你将会学习到:

    • 如何安装路由 react-navigation
    • 如何使用路由
      • 创建 StackNavigator
      • 页面间的转场和传递参数
      • 相关配置
      • TabNavigator
    • 其他通用组件

    如何安装路由 react-navigation

    • yarn add react-navigation
    • Or npm install --save react-navigation

    如何使用路由

    创建 StackNavigator

    • 创建 Screen(View) 组件: Home
    • 创建 StackNavigator: NavigationContainer
      • 导入 createStackNavigator
      • 创建 NavigationRouteConfigMap
      • 创建 StackNavigatorConfig
    • 创建 App(React.Component)
      • 引用 Navigator
      • 渲染 StackNavigator
    // home.js
    import React from 'react';
    import { View, Text } from 'react-native';
    
    export default class HomeScreen extends React.Component {
        render() {
            return (
                <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
                    <Text>Home Screen</Text>
                </View>
            );
        }
    }
    
    // navigator.js
    import React from 'react';
    import { createStackNavigator } from 'react-navigation';
    import Home from './home';
    
    const NavigationRouteConfigMap = {
        Home: {
            screen: Home,
            navigationOptions: {
                header: null,
                gesturesEnabled: false,
            },
        },
    };
    
    const StackNavigatorConfig = {
        initialRouteName: 'Home',
    };
    
    export default createStackNavigator(NavigationRouteConfigMap, StackNavigatorConfig);
    
    // app.js
    import React, { PureComponent } from 'react';
    import AppNavigator from './navigator';
    
    export default class App extends PureComponent {
        render() {
            return <AppNavigator />;
        }
    }
    
    // index.js
    import {AppRegistry} from 'react-native';
    import App from './src/app';
    import {name as appName} from './app.json';
    
    AppRegistry.registerComponent(appName, () => App);
    

    页面间的转场和传递参数

    • 创建 Screen(View) 组件: Demo
    • 在页面上增加 Navigator
      • this.props.navigation.navigate('Demo', { test: 'hello'})
      • this.props.navigation.state.params
    // demo.js
    import React from 'react';
    import { View, Text } from 'react-native';
    
    export default class DemoScreen extends React.Component {
        render() {
            return (
                <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
                    <Text>Demo Screen</Text>
                </View>
            );
        }
    }
    
    // navigator.js
    //...
    
    const NavigationRouteConfigMap = {
        //...
        Demo: {
            screen: Demo,
            navigationOptions: {
                title: 'Demo'
            },
        },
    };
    
    //...
    
    // home.js
    import React from 'react';
    import { View, Text, Button } from 'react-native';
    
    export default class HomeScreen extends React.Component {
        render() {
            return (
                <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
                    <Text>Home Screen</Text>
                    <Button 
                        title="Go to Demo"
                        onPress={() => this.props.navigation.navigate('Demo', { test: 'hello' })}
                    >
                    </Button>
                </View>
            );
        }
    }
    

    相关配置

    TODO

    TabNavigator

    • StackNavigatorConfig
      • headerMode
      • initialRouteName
      • mode
      • cardStyle
      • navigationOptions
        • headerTitleAllowFontScaling
        • headerStyle
        • headerLeft
        • headerRight
    • NavigationRouteConfigMap
      • screen
      • navigationOptions
        • title
        • left
        • right

    TabNavigator

    • 创建 TabNavigator: NavigationContainer
      • 创建 NavigationRouteConfigMap
      • 创建 BottomTabNavigatorConfig
    • 在 StackNavigator 添加 TabNavigator
    // tab.js
    import React from 'react';
    import { createBottomTabNavigator } from 'react-navigation';
    import Home from './home';
    import Demo2 from './demo2';
    
    const NavigatorTab = {
        Home: {
            screen: Home,
            navigationOptions: {
                tabBarLabel: 'Home',
                showIcon: true,
            },
        },
        Demo2: {
            screen: Demo2,
            navigationOptions: {
                tabBarLabel: 'Demo',
                showIcon: true,
            },
        },
    };
    
    const TabOptions = {
        animationEnabled: true,
    };
    
    export default createBottomTabNavigator(NavigatorTab, TabOptions);
    
    // navigator.js
    // ...
    
    const NavigationRouteConfigMap = {
        // ...
        Tab: {
            screen: Tab,
            navigationOptions: {
                header: null,
                gesturesEnabled: false,
            },
        }
    };
    
    const StackNavigatorConfig = {
        initialRouteName: 'Tab',
    };
    
    export default createStackNavigator(NavigationRouteConfigMap, StackNavigatorConfig);
    

    其他通用组件

    • 内置组件
      • Text, Button, View ...
      • StatusBar
      • RefreshControl
      • FlatList
    • 第三方组件
      • react-native-i18n
      • react-native-qrcode
      • react-native-splash-screen
      • react-native-svg-icon
      • react-native-svg
      • react-native-vector-icons
      • react-native-device-info
      • react-native-camera
      • react-native-swiper
      • react-native-root-toast
      • awesome-react-native

    相关文章

      网友评论

        本文标题:【React Native 极速指南】进阶篇

        本文链接:https://www.haomeiwen.com/subject/weshnqtx.html