美文网首页
react-navigation学习笔记六:路由混合使用

react-navigation学习笔记六:路由混合使用

作者: ghost__ | 来源:发表于2018-11-05 14:25 被阅读67次

    推荐看看两篇官网文章:
    状态栏相关设置
    隐藏底部标签TabBar及导航的解析

    正题,没写demo。复制粘贴就好

    搭建demo使用相关版本:
    "react-native": "0.56.0",
    "react-navigation": "^2.18.2"
    
    结构图.png

    模块相关:

    入口app.js:
    /**
     * Sample React Native App
     * https://github.com/facebook/react-native
     *
     * @format
     * @flow
     */
    import React, {Component} from 'react';
    import {Dimensions} from 'react-native';
    import {
        createDrawerNavigator,
        createSwitchNavigator,
        createBottomTabNavigator,
        createStackNavigator
    } from 'react-navigation';
    import Login from './login';
    import Regis from './regis';
    import Home from './home';
    import HomeDetail from './homeDetail';
    import HomeDetailLittlemoudle from './homeDetailLittlemoudle';
    import Record from './record';
    import RecordDetail from './recordDetail';
    import RecordDetailLittlemoudle from './recordDatailLittlemoudle';
    import Setting from './setting';
    import AboatAPP from './aboatAPP';
    
    const start = 'isNotLogin';
    var tabBarHeight = 50;
    
    //隐藏tabar
    const hiddleTabBar = (moudle)=>{
        moudle.navigationOptions = ({ navigation }) => {
            let tabBarVisible = true;
            if (navigation.state.index > 0) {
                tabBarVisible = false;
            }
            return {
                tabBarVisible,
            };
        };
    }
    
    //主模块
    const HomeMoudle = createStackNavigator(
        {
            H: {
                screen: Home
            },
            HD: {
                screen: HomeDetail,
            },
            HDL: {
                screen: HomeDetailLittlemoudle
            }
        }, {
            initialRouteName: 'H',
        }
    )
    hiddleTabBar(HomeMoudle)
    
    const RecordMoudle = createStackNavigator(
        {
            R: {
                screen: Record
            },
            RD: {
                screen: RecordDetail
            },
            RDL: {
                screen: RecordDetailLittlemoudle
            }
        }, {
            initialRouteName: 'R',
        }
    )
    hiddleTabBar(RecordMoudle)
    
    const MainMoudle = createBottomTabNavigator(
        {
            HomeMoudle: {
                screen: HomeMoudle
            },
            RecordMoudle: {
                screen: RecordMoudle
            }
        }, {
        }
    )
    
    
    //设置 关于
    const DrawModul = createDrawerNavigator(
        {
            MAIN: {
                screen: MainMoudle
            },
            Set: {
                screen: Setting
            },
            AboatAPP: {
                screen: AboatAPP
            }
        }, {
            initialRouteName: 'MAIN',
            drawerWidth:Dimensions.get('window').width,
            navigationOptions:{
                drawerLockMode:'locked-open'
            }
        }
    )
    
    
    
    //登录 注册
    const LoginRegisMoudle = createSwitchNavigator(
        {
            LOGIN: {
                screen: Login
            },
            REGIS: {
                screen: Regis
            },
            DRAW: {
                screen: DrawModul
            }
        }, {
            initialRouteName: start != "isLogin" ? 'DRAW' : 'LOGIN'
        }
    )
    
    
    //入口
    export default class app extends React.Component {
        render() {
            return (
                <LoginRegisMoudle/>
        )
        }
    }
    
    login.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is login</Text>
                    <Button
                        style={styles.btn}
                        title={'登录'}
                        onPress={()=>{
                            this.props.navigation.navigate('DRAW');
                        }}
                    ></Button>
                    <Button
                        style={styles.btn}
                        title={'注册账号'}
                        onPress={()=>{
                            this.props.navigation.navigate('REGIS');
                        }}
                    ></Button>
    
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    regis.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is regis</Text>
                    <Button
                        style={styles.btn}
                        title={'注册成功 返回登录'}
                        onPress={()=>{
                            this.props.navigation.navigate('LOGIN');
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 15,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    setting.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is setting</Text>
                    <Button
                        style={styles.btn}
                        title={'返回'}
                        onPress={()=>{
                            this.props.navigation.goBack();
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    aboatAPP.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is aboatAPP</Text>
                    <Button
                        style={styles.btn}
                        title={'返回'}
                        onPress={()=>{
                            this.props.navigation.navigate('MAIN');
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    record.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
    
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is record</Text>
                    <Button
                        style={styles.btn}
                        title={'侧边栏'}
                        onPress={()=>{
                            this.props.navigation.openDrawer();
                        }}
                    ></Button>
                    <Button
                        style={styles.btn}
                        title={'查看详情'}
                        onPress={()=>{
                            this.props.navigation.push('RD');
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    recordDetail.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        static navigationOptions = {
            tabBarVisible: true,
            title:'标题',
        }
    
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is recordDetail</Text>
                    <Button
                        style={styles.btn}
                        title={'查看小模块'}
                        onPress={()=>{
                            this.props.navigation.push('RDL');
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    recordDetailLittlemoudle.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is recordDetailLittlemoudle</Text>
    
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    home.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is home</Text>
                    <Button
                        style={styles.btn}
                        title={'侧边栏'}
                        onPress={()=>{
                            this.props.navigation.openDrawer();
                        }}
                    ></Button>
                    <Button
                        style={styles.btn}
                        title={'查看详情'}
                        onPress={()=>{
                            this.props.navigation.push('HD');
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    homeDetail.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        Button,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is homeDetail</Text>
                    <Button
                        style={styles.btn}
                        title={'查看小模块'}
                        onPress={()=>{
                            this.props.navigation.push('HDL');
                        }}
                    ></Button>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    
    homeDetailLittlemoudle.js
    import React, {Comoponent} from 'react';
    import {
        StyleSheet,
        View,
        Text,
        StatusBar
    } from 'react-native';
    
    export default class nav2 extends React.Component {
        render() {
            return (
                <View style={styles.container}>
                    <Text style={styles.text}>this is homeDetailLittlemoudle</Text>
                </View>
            )
        }
    }
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            alignItems: 'center',
            justifyContent: 'center',
        },
        text: {
            color: 'red',
            backgroundColor: 'pink',
            fontSize: 25,
        },
        btn: {
            backgroundColor: 'red',
            color: 'blue',
            width: 200,
            height: 44,
            marginTop: 15,
        }
    })
    

    相关文章

      网友评论

          本文标题:react-navigation学习笔记六:路由混合使用

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