美文网首页
[0.57]ReactNative-仿写Github客户端[一]

[0.57]ReactNative-仿写Github客户端[一]

作者: 多喝热水z | 来源:发表于2018-12-12 21:43 被阅读14次

    目标:
    1.完成导航框架的搭建
    2.完成欢迎页面的搭建

    步骤
    1.配置环境
    2.创建工程
    3.创建欢迎页面WelcomePage,主页HomePage,详情页DetailPage
    4.用导航包装起来。
    目标效果。
    启动APP后首先显示为欢迎页面。2秒钟后切换到主页面

    项目结构详解

    index.js
    import {AppRegistry} from 'react-native';
    import {name as appName} from './app.json';
    import Appnavigator from "./navigators/Appnavigator";
    
    AppRegistry.registerComponent(appName, () => Appnavigator);
    

    程序入口文件。import文件包含App注册组件,App名称 和要导入的导航入口

    HomePage.js
    
    import React,{Component} from 'react';
    import {Text,StyleSheet,View} from 'react-native';
    export default  class HomePage extends Component{
        render(){
            return (
                <View style={styles.container}>
                    <Text>
                        Home!
                    </Text>
                </View>
    
            );
        }
    }
    
    const styles = StyleSheet.create({
        container:{
            flex: 1,
            justifyContent: 'center'
        }
    })
    
    

    App主页面。 包含React控件和所需要的基本组件。默认显示一个Home文字

    WelcomePage.js
    import React,{Component} from 'react';
    import {Text,StyleSheet,View} from 'react-native';
    import NavigatorUtils from "../../navigators/NavigatorUtils";
    export default  class WelcomePage extends Component<Props>{
    
    
        //启动页增加定时器
        componentDidMount(){
            this.timer=setTimeout(()=>{
                //优化前
                // const {navigation} = this.props;
                // navigation.navigate('HomePage');
                //优化后
                NavigatorUtils.resetHomePage({
                   //此处的navigation名称要与工具类处声明一致
                    navigation:this.props.navigation
                })
            },2000);
        }
    
        componentWillUnmount(){
            this.timer && clearTimeout(this.timer);
        }
    
        render(){
            return (
                <View style={styles.container}>
                    <Text>
                        Welcome!
                    </Text>
                </View>
    
            );
        }
    }
    
    const styles = StyleSheet.create({
        container:{
            flex: 1,
            justifyContent: 'center'
        }
    })
    

    注解:同HomePage内容。
    在 componentDidMount()方法中添加定时器完成延时跳转效果
    需要注意的是,使用定时器后需要在componentWillUnmount()方法中进行释放。防止内存泄露。

    Appnavagator.js
    import {createStackNavigator,createSwitchNavigator,createAppContainer} from 'react-navigation'
    import WelcomePage from "../js/pages/WelcomePage";
    import DetailInfoPage from "../js/pages/DetailInfoPage";
    import HomePage from "../js/pages/HomePage";
    
    const InitNavigator=createStackNavigator({
        WelcomePage:{
            screen:WelcomePage,
            navigationOptions:{
                header:null,
            }
        },
    
    })
    
    const MainNavigator=createStackNavigator({
        HomePage:{
            screen:HomePage,
            navigationOptions:{
                header:null,
            }
        },
        DetailInfoPage:{
            screen:DetailInfoPage,
            navigationOptions:{
                header:null,
            }
        }
    })
    
    const SwitchNavigator=  createSwitchNavigator({
        Init:InitNavigator,
        Main:MainNavigator
    },{
        navigationOptions:{
            header:null,
        }
    })
    3以后需要用appcontainer来包装一下
    export default createAppContainer(SwitchNavigator)
    

    封装导航组件。react-navigation
    目前为3.0版本。
    使用步骤需要在终端执行3条命令进行框架导入

    1. yarn add react-navigation

    2.yarn add react-native-gesture-handler

    3react-native link react-native-gesture-handler

    按顺序执行即可。 然后模拟器需要关闭重启。 使用热重载会报错。
    createStackNavigator:导航容器,用来包裹普通页面。
    createSwitchNavigator:可以用来进行页面切换。
    createAppContainer:3.0后需要用这个容器包裹一下组件才能导出。
    navigationOptions:{
    header:null,
    } 用来屏蔽导航栏。

    页面功能
    用来封装一个欢迎页面导航,一个主页面导航。放入到switch中导航中然后导出

    NavigatorUtils.js
    /**
     * 导航工具类
     *
     */
    export default class NavigatorUtils {
        /**
         * 跳转到主页
         * @param navigation 上一页面传过来的参数
         */
        static resetHomePage(params){
            const {navigation} = params;
            navigation.navigate('HomePage');
        }
    
        /**
         * 返回上一页
         * @param navigation
         */
        static goBack(navigation){
            navigation.goBack();
        }
    }
    

    主要用来对页面导航跳转的封装。

    需要注意的是 navigation这个参数名与使用处一定要一致。不然可能造成找不到导航的情况。刚开始在这卡住了好久。

    Github地址:https://github.com/yanhuaxuanlan/RN_Github.git
    刚开始学习。欢迎各位指正。

    相关文章

      网友评论

          本文标题:[0.57]ReactNative-仿写Github客户端[一]

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