1.9 項目啟動引導流程實現

自己做項目中的重點知識,不是教程,如果學習的話可以拿來參考。源代碼[地址][12]
[12]: https://github.com/BaiPeiHe/react-native

流程

app 從啟動到顯示主頁的流程


啟動引導流程詳解
啟動引導流程詳解

編碼

效果:啟動 App,顯示歡迎頁面,停留幾秒鐘后顯示首頁

創建文件

|-- js
    |-- common                  可復用的組件(非完整頁面)
    |-- page                    完整頁面
        |-- setup.js
        |-- WelcomePage.js
        |-- HomePage.js

index

清理 index.js文件,在 index..js文件中將啟動頁修改為 setup,iOS 和 Android 是一樣的。

// index.ios.js 
import React, { Component } from 'react';
import {
  AppRegistry,
} from 'react-native';

import setup from './js/pages/setup'

AppRegistry.registerComponent('rn_demo', () => setup);

setup

// 創建 setup.js 文件

import React,{Component} from 'react';
import {
    View,
    StyleSheet,
    Text,
    Navigator,
} from 'react-native'

import WelcomePage from'./WelcomePage'

function setup () {
    // 進行一些初始化配置,設置根組件為 WelcomePage.js
    
    class Root extends Component{

        renderScene(route, navigator){
            let Component = route.component;

            return <Component {...route.param} navigator={navigator}/>
        }

        render(){
            return <Navigator
                initialRoute={{component:WelcomePage}}
                renderScene={(route, navigator) => this.renderScene(route,navigator)}
            />
        }
    }
    // 返回根組件
    return <Root/>
}

module.exports=setup;

WelcomePage

// WelcomePage.js

import React,{Component} from 'react';
import {
    View,
    StyleSheet,
    Text,
    Navigator
} from 'react-native'
import NavigationBar from '../common/NavigationBar'
import HomePage from './HomePage'

export default class WelcomePage extends Component{

    componentDidMount(){
        // 暫停兩秒后,重置路由指向首頁,之前的頁面都不需要了。
        this.timer = setTimeout(()=>{
            this.props.navigator.resetTo({
                component:HomePage
            })
        },2000);
    }
    // 組件取消后,取消計時器,防止組件取消后計時器還存在導致異常
    componentWillUnmount(){
        this.timer && clearTimeout(this.timer);
    }

    render(){
        return <View>
            <NavigationBar title={'歡迎'}/>

            <Text>歡迎</Text>
        </View>
    }
}

HomePage

創建包含四個 TabBar 的頁面

import React, { Component } from 'react';
import {
    StyleSheet,
    ListView,
    Image,
    Navigator,
    Text,
    View
} from 'react-native';

import TabNavigator from 'react-native-tab-navigator';

export default class HomePage extends Component {

    constructor(props){
        super(props);

        this.state={
            selectedTab: 'tb_popular',
        }
    }


    render() {
        return (
            <View style={styles.container}>
                 <TabNavigator>
                     <TabNavigator.Item
                         selected={this.state.selectedTab === 'tb_popular'}
                         selectedTitleStyle={{color:'red'}}
                         title="最熱"
                         renderIcon={() => <Image style={styles.iconImage} source={require('../../res/images/ic_polular.png')} />}
                         renderSelectedIcon={() => <Image style={[styles.iconImage,{tintColor:'red'}]} source={require('../../res/images/ic_polular.png')} />}
                         badgeText="1"
                         onPress={() => this.setState({ selectedTab: 'tb_popular' })}>
                         <View style={styles.page1}></View>
                     </TabNavigator.Item>
                     <TabNavigator.Item
                         selected={this.state.selectedTab === 'tb_trending'}
                         selectedTitleStyle={{color:'red'}}
                         title="趨勢"
                         renderIcon={() => <Image style={styles.iconImage} source={require('../../res/images/ic_trending.png')} />}
                         renderSelectedIcon={() => <Image style={[styles.iconImage,{tintColor:'red'}]} source={require('../../res/images/ic_trending.png')} />}
                         onPress={() => this.setState({ selectedTab: 'tb_trending' })}>
                         <View style={styles.page2}></View>
                     </TabNavigator.Item>
                     <TabNavigator.Item
                         selected={this.state.selectedTab === 'tb_favorite'}
                         selectedTitleStyle={{color:'red'}}
                         title="收藏"
                         renderIcon={() => <Image style={styles.iconImage} source={require('../../res/images/ic_polular.png')} />}
                         renderSelectedIcon={() => <Image style={[styles.iconImage,{tintColor:'red'}]} source={require('../../res/images/ic_polular.png')} />}
                         badgeText="1"
                         onPress={() => this.setState({ selectedTab: 'tb_favorite' })}>
                         <View style={styles.page1}></View>
                     </TabNavigator.Item>
                     <TabNavigator.Item
                         selected={this.state.selectedTab === 'tb_my'}
                         selectedTitleStyle={{color:'red'}}
                         title="我的"
                         renderIcon={() => <Image style={styles.iconImage} source={require('../../res/images/ic_trending.png')} />}
                         renderSelectedIcon={() => <Image style={[styles.iconImage,{tintColor:'red'}]} source={require('../../res/images/ic_trending.png')} />}
                         onPress={() => this.setState({ selectedTab: 'tb_my' })}>
                         <View style={styles.page2}></View>
                     </TabNavigator.Item>
                 </TabNavigator>
                
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container:{
        flex:1,
        backgroundColor: '#F5FCFF',
    },

    page1:{
        flex:1,
        backgroundColor:'red',
    },

    page2:{
        flex:1,
        backgroundColor:'yellow',
    },

    iconImage:{
        height:22,
        width:22
    }
});

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,532評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,252評論 4 61
  • 這是一座城市的故事。 這也將是一個時代的記憶。 這兩年在汕頭品味生活的人,一定能嘗到城市發展帶來的甜頭。新的城市規...
    十三紀閱讀 1,912評論 3 4