react-navigation實現(xiàn)頁面框架

react-navigation實現(xiàn)頁面框架

初始化一個RN項目

react-native init page_framework

page.json

{
    "name": "page_framework",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "16.0.0-alpha.12",
        "react-native": "0.47.1"
    },
    "devDependencies": {
        "babel-jest": "20.0.3",
        "babel-preset-react-native": "2.1.0",
        "jest": "20.0.4",
        "react-test-renderer": "16.0.0-alpha.12"
    },
    "jest": {
        "preset": "react-native"
    }
}

引入react-navigation,在項目根目錄執(zhí)行一下命令

yarn add react-navigation

現(xiàn)在的page.json

{
    "name": "page_framework",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "16.0.0-alpha.12",
        "react-native": "0.47.1",
        "react-navigation": "^1.0.0-beta.11"
    },
    "devDependencies": {
        "babel-jest": "20.0.3",
        "babel-preset-react-native": "2.1.0",
        "jest": "20.0.4",
        "react-test-renderer": "16.0.0-alpha.12"
    },
    "jest": {
        "preset": "react-native"
    }
}

創(chuàng)建項目結(jié)構(gòu)

  1. 在根目錄創(chuàng)建src文件夾
  2. 在src文件夾下創(chuàng)建root.js
  3. 在src文件夾下創(chuàng)建Screens文件夾
  4. 在Screens文件夾創(chuàng)建以下文件:home.js/Nearby.js/Message.js/Profile.js/SignIn.js/SignUp.js
  5. 在src文件夾下創(chuàng)建styles文件夾
  6. 在styles文件夾創(chuàng)建CommonStyles.js文件
  7. 在styles文件夾創(chuàng)建index.js文件

修改index.ios.js文件鸥鹉,以component的形式引用Root

import React, { Component } from 'react';
import {
  AppRegistry,
} from 'react-native';
import Root from "./src/root"

export default class page_framework extends Component {
  render() {
    return (
        <Root />
    );
  }
}


AppRegistry.registerComponent('page_framework', () => page_framework);

修改root.js內(nèi)容

引用react-navigation庫

 import { StackNavigator, TabNavigator } from 'react-navigation';

定義TabNavigator

Tab中定義了4個Tab頁,分別是Home, Nearyby, Message, Profile
screen: 后邊跟的是component name, navigationOptions是設(shè)置tab的參數(shù)羞延。

const Tab = TabNavigator(
    {
        Home:{
            screen: Home,
            navigationOptions: ({ navigation }) => ({
                tabBarLabel: 'Home',
                tabBarIcon: ({tintColor}) => (
                    <Image
                        source={require("./resource/icons/pfb_tabbar_homepage.png")}
                        style={[{tintColor: tintColor}, styles.icon]}
                    />
                ),
            }),
        },
        Nearby:{
            screen: Nearby,
            navigationOptions: ({ navigation }) => ({
                tabBarLabel: 'Nearby',
                tabBarIcon: ({tintColor}) => (
                    <Image
                        source={require("./resource/icons/pfb_tabbar_merchant.png")}
                        style={[{tintColor: tintColor}, styles.icon]}
                    />
                ),
            }),
        },
        Message:{
            screen: Message,
            navigationOptions: ({ navigation }) => ({
                tabBarLabel: 'Message',
                tabBarIcon: ({tintColor}) => (
                    <Image
                        source={require("./resource/icons/pfb_tabbar_discover.png")}
                        style={[{tintColor: tintColor}, styles.icon]}
                    />
                ),
            }),
        },
        Profile:{
            screen: Profile,
            navigationOptions: ({ navigation }) => ({
                tabBarLabel: 'Profile',
                tabBarIcon: ({tintColor}) => (
                    <Image
                        source={require("./resource/icons/pfb_tabbar_mine.png")}
                        style={[{tintColor: tintColor}, styles.icon]}
                    />
                ),
            }),
        },
    },
    {
        tabBarPosition: 'bottom',
        swipeEnabled: true,
        animationEnabled: true,
        lazy: true,
    },
);

定義StackNavigator

整個app由3個頁面組成:Tab睁宰,SignIn,SignUp卖丸。
應用默認打開SignIn頁面,
以上頁面全部注冊到StackNavigator中糠悯。

const Navigator = StackNavigator(
    {
        SignIn: { screen: SignIn },
        SignUp: { screen: SignUp },
        Tab: { screen: Tab },
    },
    {
        navigationOptions: {
            headerBackTitle: null,
            headerTintColor: '#333333',
        },
    },
);

在root中使用Navigator

class Root extends Component{

    render(){
        return (
            <Navigator />
        );
    }
}

在SignIn頁面跳轉(zhuǎn)到主頁(Tab頁)

在render中拿到navigation上下文帮坚,使用this.props.navigation.navigate()方法跳轉(zhuǎn)到相應頁面,參數(shù)為注冊到StackNavigator中的頁面互艾,這里使用Tab试和。

import React, { PureComponent } from 'react';
import {
    View,
    Text,
    Button,
} from 'react-native';
import { CommonStyles } from "../styles/";

class SignIn extends PureComponent{
    static navigationOptions = {
        header: null,
    };
    render(){
        return(
            <View style={CommonStyles.container}>
                <Text style={CommonStyles.welcome}>
                    this is SignIn page!
                </Text>
                <Text style={CommonStyles.instructions}>
                    this is SignIn page!
                </Text>
                <Text style={CommonStyles.instructions}>
                    this is SignIn page!
                </Text>
                <Button title="登錄" onPress={() =>
                    this.props.navigation.navigate('Tab')}
                />
                <Button title="注冊" onPress={() =>
                    this.props.navigation.navigate('SignUp')}
                />
            </View>
        );
    }
}

export default SignIn;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纫普,隨后出現(xiàn)的幾起案子阅悍,更是在濱河造成了極大的恐慌,老刑警劉巖昨稼,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件节视,死亡現(xiàn)場離奇詭異,居然都是意外死亡假栓,警方通過查閱死者的電腦和手機寻行,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾荆,“玉大人拌蜘,你說我怎么就攤上這事⊙览觯” “怎么了简卧?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剩岳。 經(jīng)常有香客問我贞滨,道長,這世上最難降的妖魔是什么拍棕? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮勺良,結(jié)果婚禮上绰播,老公的妹妹穿的比我還像新娘。我一直安慰自己尚困,他們只是感情好蠢箩,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般谬泌。 火紅的嫁衣襯著肌膚如雪滔韵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天掌实,我揣著相機與錄音陪蜻,去河邊找鬼。 笑死贱鼻,一個胖子當著我的面吹牛宴卖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邻悬,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼症昏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了父丰?” 一聲冷哼從身側(cè)響起肝谭,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛾扇,沒想到半個月后攘烛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡屁桑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年医寿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘑斧。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡靖秩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竖瘾,到底是詐尸還是另有隱情沟突,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布捕传,位于F島的核電站惠拭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏庸论。R本人自食惡果不足惜职辅,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂示。 院中可真熱鬧域携,春花似錦、人聲如沸鱼喉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锋边,卻和暖如春皱坛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豆巨。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工剩辟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搀矫。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓抹沪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓤球。 傳聞我的和親對象是個殘疾皇子融欧,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容