1. 程式人生 > >react-native react-navigation的用法 react native 導航路由元件react-navigation的使用

react-native react-navigation的用法 react native 導航路由元件react-navigation的使用

 

一、問題背景

react-navigation是react-native官方推薦的,基於Javascript的可擴充套件且使用簡單的導航,功能強大且完備

 

回顧一下,react-navigation包含以下功能來幫助我們建立導航器:

  • StackNavigator - 一次只渲染一個頁面,並提供頁面之間跳轉的方法。 當開啟一個新的頁面時,它被放置在堆疊的頂部
  • TabNavigator - 渲染一個Tab選項卡,讓使用者可以在幾個Tab頁面之間切換
  • DrawerNavigator - 提供一個從螢幕左側滑入的抽屜,類似bilibili和QQ的隱藏在左側的內容欄功能
詳細請看: react native 導航路由元件react-navigation的使用 通過這些部落格教程,我們可以瞭解react-navigation的主要功能,如上述的三個功能塊,這對於一些練手用的小APP來說,已經夠了,     但是,對於稍微有點需求的應用來說,這點功能就不夠用了, 問題一: 如何重置堆疊?     比如,登陸成功後,點選返回,總不能讓頁面返回登入頁吧!   問題二: 如何有選擇的清除堆疊?     比如,編輯內容釋出成功後,跳轉的已釋出的內容頁,這時候再點返回,你總不能返回剛剛的編輯頁吧!
  問題三:如何在多個StackNavigator之間,或StackNavigator父子間進行導航?     有時候,我們需要的導航棧不止一個,那麼他們之間如何進行頁面跳轉?      二、分析 我們來看看react-navigation的基本使用:

(1)通過navigate函式實現介面之間跳轉:

this.props.navigation.navigate('Mine');

引數為我們在StackNavigator註冊介面元件時的名稱。

同樣也可以從當前頁面返回到上一頁:

// 返回上一頁
this.props.navigation.goBack();

這是手動返回上一頁,也可通過每個頁面自帶的返回圖示返回

 

(2)跳轉時傳值:

this.props.navigation.navigate('Mine',{info: 'value'});

第一個引數同樣為要跳轉的介面元件名稱,第二個引數為要傳遞的引數,info可以理解為key,後面即傳遞的引數(value值)。

同樣,我們也可以在跳轉後的頁面去獲取攜帶過來的值:

this.props.navigation.state.params.info}

通過state.params來獲取傳來的引數,後面為key值。此處為info。

  (3)react-navigation自帶標題欄的使用:
//會覆蓋StackNavigator宣告的頁面的navigationOptions 
static  navigationOptions = ({navigation}) => ({
    headerTintColor: '#fff',
    headerStyle: {height: 65, backgroundColor: '#fb7299'},
    headerTitle: navigation.state.params.title, //這是從上一級跳轉攜帶的
    headerTitleStyle: {
        fontSize: 18,
        color: '#fff',
        alignSelf: 'center',    //包括下面的屬性主要是為了標題居中顯示
        flex: 1,
        textAlign: 'center'
    },
    headerRight: <View>
              <TouchableOpacity onPress={() => {navigation.state.params.toOperate();}}>    //此處必須通過新增引數的形式來呼叫方法
                  <View><Text style={{color: '#fff', marginRight: 20}}>下一步</Text></View>
              </TouchableOpacity >
          </View>
})
1. navigation.state.params.title表示通過引數的形式來顯示標題
2. 想要標題居中,alignSelf: 'center', flex: 1, textAlign: 'center'
3. navigation.state.params.toOperate();通過這種傳參的方式,在標題欄中呼叫方法

該方法需要在componentDidMount()等方法中設定傳遞
componentDidMount() {
    this.props.navigation.setParams({toOperate: () => {
        alert('操作')
    }})
}

 

三、結語
先這樣咯!