ReactNative基礎(五)使用react-navigation實現頁面的跳轉、引數的傳遞(StackNavigator)
此部落格基於react-native-0.48.4
Navigator(導航欄)
在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