1. 程式人生 > >ReactNative基礎(五)使用react-navigation實現頁面的跳轉、引數的傳遞(StackNavigator)

ReactNative基礎(五)使用react-navigation實現頁面的跳轉、引數的傳遞(StackNavigator)

此部落格基於react-native-0.48.4

在ReactNative v0.43之前的時候官方提供了Navigator元件,在v0.44版本之後官方就把他廢棄了這是為什麼呢?原因就是有個比他更好的react-navigation導航欄了、不得不說第三方依賴庫真的很強大。

React Navigation

  • 其中包含了我們開發中最常用的三種導航方式
    • StackNavigator(頂部導航欄)
    • TabNavigator (標籤導航欄)
    • DrawerNavigator(側滑選單導航欄)
    • 效果圖可以在官網首頁看下

這篇文章就簡單來說說StackNavigator

  • 既然使用的是第三方庫,如果在你專案的node_modules資料夾中沒有react-navigation那麼你需要執行如下命令
//進入你專案的根目錄下執行
npm install --save react-navigation

引入react-navigation中的StackNavigator

  • 建立一個Application.js檔案
import {
    StackNavigator,
} from 'react-navigation';

import React from 'react';

const Main = require('./Main');
const
Detail = require('./Details'); const Menu = require('./Menu'); /* * 初始化StackNavigator */ export default App = StackNavigator({ //預設載入第一個頁面,這裡用來註冊需要跳轉的頁面 相當於Manifest.xml檔案 Main: { screen: Main, }, Detail: { screen: Detail, }, Menu: { screen: Menu, } });

這個檔案負責對我們需要跳轉的頁面進行註冊(相當於在Android中每一個Activity都需要在清單檔案中註冊),同時也建立了navigation供後續操作。

  • 修改 android 和 ios 的入口檔案載入這個檔案,然後就會繼續載入Main頁面 最終顯示內容
import React, {Component} from 'react';
import {
    AppRegistry,
} from 'react-native';

//這裡不能寫var App = require('./src/Application'); 會出現問題
//(小白剛學還不會,有路過的大神可以留言教一下)。
import App from './src/Application';

export default class Pagejump extends Component {
    render() {
        return (
            <App/>
        );
    }
}

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

效果圖:
這裡寫圖片描述

在Main頁面新增一個按鈕跳轉至下一個頁面、並修改導航欄的樣式

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

class Main extends Component {

    //設定頂部導航欄的內容
    static navigationOptions = ({navigation, screenProps}) => ({
        //左側標題
        headerTitle: '我是主頁面',
        //設定跳轉頁面左側返回箭頭後面的文字,預設是上一個頁面的標題
        headerBackTitle: null,
        //頂部標題欄的樣式
        headerStyle: styles.headerStyle,
        //頂部標題欄文字的樣式
        headerTitleStyle: styles.headerTitleStyle,
    });

    render() {
        return (
            <View style={styles.container}>
                {/*頁面跳轉*/}
                <TouchableOpacity style={styles.button} activeOpacity={0.5} onPress={() => {
                    this.props.navigation.navigate('Detail', {key: '傳遞的標題'})
                }}>
                    <Text style={{color: 'white'}}>帶引數 跳轉至Details頁面</Text>
                </TouchableOpacity>
                <Text style={{marginTop: 10, color: 'black'}}>當前是Main頁面</Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    button: {
        width: 240,
        height: 45,
        borderRadius: 5,
        alignItems: 'center',
        justifyContent: 'center',
        backgroundColor: '#4398ff',
    },
    headerStyle: {
        backgroundColor: '#4398ff',
    },
    headerTitleStyle: {
        //標題的文字顏色
        color: 'white',
        //設定標題的大小
        fontSize: 18,
        //居中顯示
        alignSelf: 'center',
    },
});
module.exports = Main;

這裡就要重點說一說navigationOptions中的屬性了

  • headerTitle: '標題' ===> 導航欄的標題
  • header: null ===> 隱藏導航欄
  • headerTintColor: 'white' ===> 返回按鈕的顏色
  • headerTitleStyle: {} ===> 導航欄文字的樣式
  • headerStyle: {} ===> 導航欄的樣式
  • headerRight: (< View/>) ===> 設定頂部導航欄友邊的檢視 和 解決當有返回箭頭時,文字不居中
  • headerLeft: (< View/>) ===> 設定導航欄左邊的檢視 和 去除返回箭頭
  • headerBackTitle: null ===> 設定跳轉頁面左側返回箭頭後面的文字,預設是上一個頁面的標題
  • gestureResponseDistance: {horizontal: 300} ===> //設定滑動返回的距離

上面跳轉頁面的時候我們向下一個頁面傳遞了一個鍵值為key的引數

//頁面跳轉 第一個引數則是我們在`Application.js`中註冊的頁面
//第二個引數則是傳遞的引數,也可以不傳。
this.props.navigation.navigate('Detail', {key: '傳遞的標題'}

//跳轉頁面的第二種寫法
const {navigate} = this.props.navigation;
navigate('Detail', {key: '傳遞的引數'});

//沒有引數的情況
const {navigate} = this.props.navigation;
navigate('Detail');

頁面接收傳遞過來的值

navigation.state.params.key //key就是你自己設定的鍵

頁面跳轉效果圖(有點失幀)

這裡寫圖片描述

Details頁面這裡就不貼出了,跟Main內容都是差不多的。可以檢視文末給出的原始碼

主要說一下最後一個帶有選單的頁面

  • 主要還是配置navigationOptions屬性
//設定頂部導航欄的內容
static navigationOptions = ({navigation, screenProps}) => ({
    // 這裡面的屬性和App.js的navigationOptions是一樣的。
    headerTitle: '我是帶有選單的頁面',
    // 設定滑動返回的距離
    gestureResponseDistance: {horizontal: 300},
    //設定跳轉頁面左側返回箭頭後面的文字,預設是上一個頁面的標題
    headerBackTitle: null,
    //頂部標題欄的樣式
    headerStyle: styles.headerStyle,
    //頂部標題欄文字的樣式
    headerTitleStyle: styles.headerTitleStyle,
    //返回按鈕的顏色
    headerTintColor: 'white',
    //設定頂部導航欄左邊的檢視
    headerLeft: (<View/>),
    //設定頂部導航欄左邊的檢視  和 解決當有返回箭頭時,文字不居中
    headerRight: (
        <Text style={{color: 'white', marginRight: 13}}
              onPress={() => navigation.state.params ? navigation.state.params.menuClick() : null}>新增
        </Text>),
});
  • 隱藏左邊返回箭頭:headerLeft: (< View/>),
  • 新增右邊的選單:headerRight: (),

對選單新增點選事件,新增headerRight檢視的時候我們已經呼叫好了方法現在只需要定義即可

  • 需要在view渲染完成之後新增點選事件
componentDidMount() {
    // 通過在componentDidMount裡面設定setParams
    this.props.navigation.setParams({
        menuClick: this.menuClick,
    });
}
  • 點選事件響應的函式
menuClick = () => {
    alert('我是新增選單');
};

End:StackNavigator就簡單的介紹到這裡來,原始碼下載地址如果遇到什麼問題歡迎留言或者issuse

推薦閱讀:

相關推薦

mui初步應用 頁面引數傳遞問題

繼續申明小白(希望有天可以自信的說是大佬 - -) 網上的各種頁面跳轉和引數傳遞相關文章太多,我就說些自己遇到的吧,沒總結到沒關係,以後慢慢改。。 一、頁面跳轉: 那啥 a標籤跳轉就不用說了吧- - 我還真試了 就是引數不好傳。。 然後選擇了點選事件,主要看裡面的

react專案中頁面重新整理及獲取網路狀態

// 頁面跳轉 window.location.href = 'http://speedtest.wangxiaotong.com/' // 頁面重新整理 window.location.reload() // 獲取當前網路狀態,只能判斷使用者電腦有沒有斷網(包括無線和有線),有網為true,沒有網

react路由引數傳遞和Ajax請求API資料

我專案完整程式碼請進入我的github“星座運勢”github上原始碼地址歡迎點一下star(^_^),在這個專案中使用了react框架元件化開發、react路由實現介面跳轉和引數傳遞,此外我所使用的資料來源於ShowAPI介面。 一下為路由部分程式碼(app

ReactNative基礎使用react-navigation實現頁面引數傳遞StackNavigator

此部落格基於react-native-0.48.4 Navigator(導航欄) 在ReactNative v0.43之前的時候官方提供了Navigator元件,在v0.44版本之後官

ReactNative基礎使用react-navigation實現頁面引數傳遞StackNavigator

作者:阿鍾 部落格:http://blog.csdn.net/a_zhon 此部落格基於react-native-0.48.4 Navigator(導航欄) 在ReactNative v0.43之前的時候官方提供了Navigator元件,在v0.44版本之後官方就把他廢棄了這是為什麼呢?原因就是有個比他

ReactNative基礎使用react-navigation實現頁面導航佈局效果TabNavigator)

此部落格基於react-native-0.49.3 上一篇介紹了一下react-navigation依賴庫中的StackNavigator 這篇文章就接著上一篇繼續往下說也就是依賴庫中的第二個導航欄TabNavigator相當於Android中的Tab

安卓——Intent實現頁面的兩種方法

下圖中兩個不同的方法就是兩種頁面之間跳轉的情況1>跳轉不返回資料2>跳轉返回資料例項:第一種啟動方式(跳轉不返回資料)第二種啟動方式(跳轉返回資料)先看第一種:點選第一種啟動方式按鈕會出現右邊的圖,然後再點選Button按鈕返回左邊的介面,TextView中的內容

JSP頁面失敗404問題springmvc

Spring MVC 分離了控制器、模型物件、過濾器以及處理程式物件的角色。那麼其配置中也就對路徑做了過濾。 在使用eclipse開發JavaWeb時,剛剛入門的小白經常會遇到JSP跳轉失敗404,大多是因為路徑問題。 發現字尾名jsp重複了,我們來

react native 原生頁面React頁面react頁面回退到原生頁面實現

1.最新實現方式,只要繼承ReactActivity,重寫getMainComponentName()方法。內部已實現。2.以前實現方式,實現DefaultHardwareBackBtnHandler介面,在ReactInstanceManager 設定DefaultHard

php中實現頁面的幾種方式

腳本 timeout location clas replace asc idt lee 實現 親測,not復制粘貼 PHP中實現頁面跳轉有一下幾種方式,看了幾個人寫的不是很條理,自己整理一下 在PHP腳本代碼中實現 <?php header("locati

ui li 形式的菜單 實現頁面

頁面跳轉 app /*跳轉*/ jumpEditRectificatBill:function(){ $("#getEquipLegerFrom li").each(function(){ //var jumpid=$(this).attr("id")

用js實現頁面的幾種方式

head 註意 ont rem text pla http bsp cat 通過js或者html或者PHP等動態程序都可以方便的實現跳轉,這裏搜集了幾種頁面跳轉的方式js方式的頁面跳轉1.window.location.href方式 <script langua

ASP.NET MVC中如何實現頁面

pub ring 項目 再見 name ati 方法 技術 mod 1,最簡單的方式:超鏈接 以下分別是連接到HomeController控制器下的SharpL動作方法,以及百度首頁。代碼如下: 1 <a href="Home\SharpL">打開S

php實現頁面方法彙總

一共有三種方法實現頁面跳轉,分別利用php提供的header()、html meta標籤、JavaScript指令碼。 header() header()方法通過設定http響應頭中的location域實現跳轉。這種跳轉實現對使用者是不可見的,有瀏覽器直接執行

實現頁面——Intent

Intent可以理解為信使(意圖),由Intent來協作完成Android各個元件之間的通訊。 Intent實現頁面跳轉 1.直接實現A頁面跳轉到B頁面:startActivity(intent) 2.直接A啟動B頁面,切B頁面可以把資料回傳給A:startActivi

Axure中實現頁面倒計時

在瀏覽一個頁面時,如果跳轉到下一個頁面,一般需要等待幾秒,有些網站就會產生倒計時等待的狀態,這樣一個效果暫且稱為Axure頁面跳轉倒計時。在Axure(http://www.axurechina.cc/)中要實現這樣一個效果需要用到幾個簡單的互動效果,以下將是具體操作流程。關於頁面跳轉的設定

AngularJS進階 八 實現頁面並進行參數傳遞

res 初始化 .get web js進階 頁面 city 過程 元素 angularjs實現頁面跳轉並進行參數傳遞 註:請點擊此處進行充電! Angular頁面傳參有多種辦法,我在此列舉4種最常見的: 1. 基於ui-router的頁面跳轉傳參 (1) 在Angular

AngularJS進階 八 實現頁面並進行引數傳遞

angularjs實現頁面跳轉並進行引數傳遞 注:請點選此處進行充電! Angular頁面傳參有多種辦法,我在此列舉4種最常見的: 1. 基於ui-router的頁面跳轉傳參 (1) 在AngularJS的app.js中用ui-router定義路由,比如現在

微信小程式例子——點選文字實現頁面

1、效果展示 .w 2、關鍵程式碼 index.js檔案 Page({ data:{ // text:"這是一個頁面" }, onLoad:function(options){

使用AJAX實現頁面

$.ajax({ type:"POST", url: //你的請求程式頁面隨便啦 async:false,//同步:意思是當有返回值以後才會進行後面的js程式。 dat