美文网首页
RN学习-程序入口

RN学习-程序入口

作者: 马戏团小丑 | 来源:发表于2017-10-20 15:08 被阅读39次

程序启动的时候,如果是第一次,进入引导页 如果不是第一次,直接进入main

App.js

/**
 * @providesModule App
 */
import React, {Component} from 'react'
// 2.导入常用组件,注册组件,样式组件,View组件,Text组件
import
{
    AppRegistry,
    StyleSheet,
    Text,
    View,
    AsyncStorage
}from 'react-native'

import Main from 'Main'

import Guide from 'Guide'

import Launch from 'Launch'

// react-native-deprecated-custom-components
import {Navigator} from 'react-native-deprecated-custom-components'

/*
* 程序启动的时候,如果是第一次,进入引导页 如果不是第一次,直接进入main
* RN获取不到版本号
* 本地存储: 第一次进入的时候,记录下
* 第二次,从本地存储中获取 有没有第一次进入信息,如果有,就直接显示main
* */

/*
* 解决引导页延迟加载问题
* 1.自己实现启动界面
* 2.等1秒执行引导页
* */

// 3.自定义 程序入口组件([[UIView alloc] init])
export default class App extends Component {

    guideApp(){
        // 1.读取本地数据
        var isFirst = null;

        AsyncStorage.getItem('isFirst',(error,result)=>{

                // 2.判断是否是第一次
                isFirst = result;

                // 3.第一次Guide,记录第一次
                if(isFirst){
                    this.navigator.replace({component:Main})

                } else {

                    // 记录
                    AsyncStorage.setItem('isFirst',"true",(error)=>{
                        if(error){
                            alert('保存失败');
                        }
                    });

                    this.navigator.replace({component:Guide})

                }
        });
    }

    componentDidMount() {
        setTimeout(this.guideApp.bind(this),500)
        // this.guideApp();
    }

    render(){

        return (
            <Navigator initialRoute={{
                component:Launch
            }}
                       renderScene={this.renderScene.bind(this)}
            />
        )

    }

    // 渲染组件
    renderScene(route, navigator){
        this.navigator = navigator;
        return (<route.component navigator={navigator} {...route} />)
    }

}

// 4.样式表 组件外观 尺寸,颜色
var styles = StyleSheet.create({
    viewStyle:{
        flex:1,
        justifyContent:'center',
        alignItems:'center'
    }
})

知识点:

  • 本地存储AsyncStorage
存储
// JSON.stringify(object): JSON对象转换为字符串 用来存储
        AsyncStorage.setItem('object',JSON.stringify(object),(error)=>{
            if (error) {
                alert('存储失败');
            } else  {
                alert('存储成功');
            }
        });
读取
AsyncStorage.getItem('object',(error,result)=>{
            if (!error) {
                console.log(result);
            }
        })
删除
delete(){
        AsyncStorage.removeItem('object',(error)=>{
            if (error) {
                alert('删除失败');
            } else  {
                alert('删除成功');
            }
        });
    }

相关文章

网友评论

      本文标题:RN学习-程序入口

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