1. 程式人生 > >react-navigation跨tab路由處理

react-navigation跨tab路由處理



一般應用都有跨tab跳轉的需求, 這就需要特別處理下路由. 下面是使用React-navigation作為路由元件的一種方式.http://www.bijishequ.com/detail/369321

具體情境是: app分三大模組Home主頁, Bill賬單和Me我的, 對應三個tab. 現在需求是 Home push HomeTwoHomeTwopush BillTwoBillTwo 返回到 Bill賬單首頁.

首先選擇路由結構, 選擇使用最外層是StackNavigator, 然後包含3個TabNavigator和其他元件.

const Components = {
    HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },
    HomeThree: { screen: HomeThree, path:'app/HomeThree' },
    BillTwo: { screen: BillTwo, path:'app/BillTwo' },
    BillThree: { screen: BillThree, path:'app/BillThree' },
}

const Tabs = TabNavigator({
     Home: {
         screen: Home,
         path:'app/home',
         navigationOptions: { 
             tabBar: {
                 label: '首頁',
                 icon: ({tintColor}) => (<Image source={require('./images/home.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Bill: {
         screen: Bill,
         path:'app/bill',
         navigationOptions: {
             tabBar: {
                 label: '賬單',
                 icon: ({tintColor}) => (<Image source={require('./images/bill.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Me: {
         screen: Me,
         path:'app/me',
         navigationOptions: {
             tabBar: {
                 label: '我',
                 icon: ({tintColor}) => (<Image source={require('./images/me.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     }
   }, {
       tabBarPosition: 'bottom', 
       swipeEnabled: false,
       animationEnabled: false, 
       lazyLoad: false, 
       backBehavior: 'none', 
       tabBarOptions: {
           activeTintColor: '#ff8500', 
           inactiveTintColor: '#999',
           showIcon: true, 
           indicatorStyle: {
               height: 0  
           },
           style: {
               backgroundColor: '#fff', 
           },
           labelStyle: {
               fontSize: 10, 
           },
       },
 });


 const Navs = StackNavigator({
     Home: { screen: Tabs, path:'app/Home' },
     Bill: { screen: Tabs, path:'app/Bill' },
     Me: { screen: Tabs, path:'app/Me' },
     ...Components
 }, {
        initialRouteName: 'Home', 
        navigationOptions: { 
            header: {  
                style: {
                    backgroundColor: '#fff'
                },
                titleStyle: {
                    color: 'green'
                }
            },
            cardStack: { 
                gesturesEnabled: true
            }
        },
        mode: 'card',  
        headerMode: 'screen'
 });

HomeTwo裡使用react-navigation自帶的reset action就可以重置路由資訊了:

// push BillTwo
this.props.navigation.dispatch(resetAction);

// 使用reset action重置路由
const resetAction = NavigationActions.reset({
    index: 1,  // 注意不要越界
    actions: [  // 棧裡的路由資訊會從 Home->HomeTwo 變成了 Bill->BillTwo
        NavigationActions.navigate({ routeName: 'Bill'}),
        NavigationActions.navigate({ routeName: 'BillTwo'})
    ]
});

HomeTwo push 到 BillTwo頁面後, 點選BillTwo的左上角導航按鈕返回就能返回到Bill賬單首頁了.


http://www.bijishequ.com/detail/369321

具體情境是: app分三大模組Home主頁, Bill賬單和Me我的, 對應三個tab. 現在需求是 Home push HomeTwoHomeTwopush BillTwoBillTwo 返回到 Bill賬單首頁.

首先選擇路由結構, 選擇使用最外層是StackNavigator, 然後包含3個TabNavigator和其他元件.

const Components = {
    HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },
    HomeThree: { screen: HomeThree, path:'app/HomeThree' },
    BillTwo: { screen: BillTwo, path:'app/BillTwo' },
    BillThree: { screen: BillThree, path:'app/BillThree' },
}

const Tabs = TabNavigator({
     Home: {
         screen: Home,
         path:'app/home',
         navigationOptions: { 
             tabBar: {
                 label: '首頁',
                 icon: ({tintColor}) => (<Image source={require('./images/home.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Bill: {
         screen: Bill,
         path:'app/bill',
         navigationOptions: {
             tabBar: {
                 label: '賬單',
                 icon: ({tintColor}) => (<Image source={require('./images/bill.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Me: {
         screen: Me,
         path:'app/me',
         navigationOptions: {
             tabBar: {
                 label: '我',
                 icon: ({tintColor}) => (<Image source={require('./images/me.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     }
   }, {
       tabBarPosition: 'bottom', 
       swipeEnabled: false,
       animationEnabled: false, 
       lazyLoad: false, 
       backBehavior: 'none', 
       tabBarOptions: {
           activeTintColor: '#ff8500', 
           inactiveTintColor: '#999',
           showIcon: true, 
           indicatorStyle: {
               height: 0  
           },
           style: {
               backgroundColor: '#fff', 
           },
           labelStyle: {
               fontSize: 10, 
           },
       },
 });


 const Navs = StackNavigator({
     Home: { screen: Tabs, path:'app/Home' },
     Bill: { screen: Tabs, path:'app/Bill' },
     Me: { screen: Tabs, path:'app/Me' },
     ...Components
 }, {
        initialRouteName: 'Home', 
        navigationOptions: { 
            header: {  
                style: {
                    backgroundColor: '#fff'
                },
                titleStyle: {
                    color: 'green'
                }
            },
            cardStack: { 
                gesturesEnabled: true
            }
        },
        mode: 'card',  
        headerMode: 'screen'
 });

HomeTwo裡使用react-navigation自帶的reset action就可以重置路由資訊了:

// push BillTwo
this.props.navigation.dispatch(resetAction);

// 使用reset action重置路由
const resetAction = NavigationActions.reset({
    index: 1,  // 注意不要越界
    actions: [  // 棧裡的路由資訊會從 Home->HomeTwo 變成了 Bill->BillTwo
        NavigationActions.navigate({ routeName: 'Bill'}),
        NavigationActions.navigate({ routeName: 'BillTwo'})
    ]
});

HomeTwo push 到 BillTwo頁面後, 點選BillTwo的左上角導航按鈕返回就能返回到Bill賬單首頁了.

一般應用都有跨tab跳轉的需求, 這就需要特別處理下路由. 下面是使用React-navigation作為路由元件的一種方式.http://www.bijishequ.com/detail/369321

具體情境是: app分三大模組Home主頁, Bill賬單和Me我的, 對應三個tab. 現在需求是 Home push HomeTwoHomeTwopush BillTwoBillTwo 返回到 Bill賬單首頁.

首先選擇路由結構, 選擇使用最外層是StackNavigator, 然後包含3個TabNavigator和其他元件.

const Components = {
    HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },
    HomeThree: { screen: HomeThree, path:'app/HomeThree' },
    BillTwo: { screen: BillTwo, path:'app/BillTwo' },
    BillThree: { screen: BillThree, path:'app/BillThree' },
}

const Tabs = TabNavigator({
     Home: {
         screen: Home,
         path:'app/home',
         navigationOptions: { 
             tabBar: {
                 label: '首頁',
                 icon: ({tintColor}) => (<Image source={require('./images/home.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Bill: {
         screen: Bill,
         path:'app/bill',
         navigationOptions: {
             tabBar: {
                 label: '賬單',
                 icon: ({tintColor}) => (<Image source={require('./images/bill.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Me: {
         screen: Me,
         path:'app/me',
         navigationOptions: {
             tabBar: {
                 label: '我',
                 icon: ({tintColor}) => (<Image source={require('./images/me.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     }
   }, {
       tabBarPosition: 'bottom', 
       swipeEnabled: false,
       animationEnabled: false, 
       lazyLoad: false, 
       backBehavior: 'none', 
       tabBarOptions: {
           activeTintColor: '#ff8500', 
           inactiveTintColor: '#999',
           showIcon: true, 
           indicatorStyle: {
               height: 0  
           },
           style: {
               backgroundColor: '#fff', 
           },
           labelStyle: {
               fontSize: 10, 
           },
       },
 });


 const Navs = StackNavigator({
     Home: { screen: Tabs, path:'app/Home' },
     Bill: { screen: Tabs, path:'app/Bill' },
     Me: { screen: Tabs, path:'app/Me' },
     ...Components
 }, {
        initialRouteName: 'Home', 
        navigationOptions: { 
            header: {  
                style: {
                    backgroundColor: '#fff'
                },
                titleStyle: {
                    color: 'green'
                }
            },
            cardStack: { 
                gesturesEnabled: true
            }
        },
        mode: 'card',  
        headerMode: 'screen'
 });

HomeTwo裡使用react-navigation自帶的reset action就可以重置路由資訊了:

// push BillTwo
this.props.navigation.dispatch(resetAction);

// 使用reset action重置路由
const resetAction = NavigationActions.reset({
    index: 1,  // 注意不要越界
    actions: [  // 棧裡的路由資訊會從 Home->HomeTwo 變成了 Bill->BillTwo
        NavigationActions.navigate({ routeName: 'Bill'}),
        NavigationActions.navigate({ routeName: 'BillTwo'})
    ]
});

HomeTwo push 到 BillTwo頁面後, 點選BillTwo的左上角導航按鈕返回就能返回到Bill賬單首頁了.


http://www.bijishequ.com/detail/369321

具體情境是: app分三大模組Home主頁, Bill賬單和Me我的, 對應三個tab. 現在需求是 Home push HomeTwoHomeTwopush BillTwoBillTwo 返回到 Bill賬單首頁.

首先選擇路由結構, 選擇使用最外層是StackNavigator, 然後包含3個TabNavigator和其他元件.

const Components = {
    HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },
    HomeThree: { screen: HomeThree, path:'app/HomeThree' },
    BillTwo: { screen: BillTwo, path:'app/BillTwo' },
    BillThree: { screen: BillThree, path:'app/BillThree' },
}

const Tabs = TabNavigator({
     Home: {
         screen: Home,
         path:'app/home',
         navigationOptions: { 
             tabBar: {
                 label: '首頁',
                 icon: ({tintColor}) => (<Image source={require('./images/home.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Bill: {
         screen: Bill,
         path:'app/bill',
         navigationOptions: {
             tabBar: {
                 label: '賬單',
                 icon: ({tintColor}) => (<Image source={require('./images/bill.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     },
     Me: {
         screen: Me,
         path:'app/me',
         navigationOptions: {
             tabBar: {
                 label: '我',
                 icon: ({tintColor}) => (<Image source={require('./images/me.png')} style={[{tintColor: tintColor},styles.icon]}/>),
             },
         }
     }
   }, {
       tabBarPosition: 'bottom', 
       swipeEnabled: false,
       animationEnabled: false, 
       lazyLoad: false, 
       backBehavior: 'none', 
       tabBarOptions: {
           activeTintColor: '#ff8500', 
           inactiveTintColor: '#999',
           showIcon: true, 
           indicatorStyle: {
               height: 0  
           },
           style: {
               backgroundColor: '#fff', 
           },
           labelStyle: {
               fontSize: 10, 
           },
       },
 });


 const Navs = StackNavigator({
     Home: { screen: Tabs, path:'app/Home' },
     Bill: { screen: Tabs, path:'app/Bill' },
     Me: { screen: Tabs, path:'app/Me' },
     ...Components
 }, {
        initialRouteName: 'Home', 
        navigationOptions: { 
            header: {  
                style: {
                    backgroundColor: '#fff'
                },
                titleStyle: {
                    color: 'green'
                }
            },
            cardStack: { 
                gesturesEnabled: true
            }
        },
        mode: 'card',  
        headerMode: 'screen'
 });

HomeTwo裡使用react-navigation自帶的reset action就可以重置路由資訊了:

// push BillTwo
this.props.navigation.dispatch(resetAction);

// 使用reset action重置路由
const resetAction = NavigationActions.reset({
    index: 1,  // 注意不要越界
    actions: [  // 棧裡的路由資訊會從 Home->HomeTwo 變成了 Bill->BillTwo
        NavigationActions.navigate({ routeName: 'Bill'}),
        NavigationActions.navigate({ routeName: 'BillTwo'})
    ]
});

HomeTwo push 到 BillTwo頁面後, 點選BillTwo的左上角導航按鈕返回就能返回到Bill賬單首頁了.

相關推薦

react-navigationtab路由處理

一般應用都有跨tab跳轉的需求, 這就需要特別處理下路由. 下面是使用React-navigation作為路由元件的一種方式.http://www.bijishequ.com/detail/369321 具體情境是: app分三大模組Home主頁, Bill賬單和Me我

react-navigation 導航、路由

outer dsta one erp 頁面設置 png stack raw params 1,首先,下載,安裝,引入react-navigation  npm install --save react-navigation  或者 yarn add rea

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

  一、問題背景 react-navigation是react-native官方推薦的,基於Javascript的可擴充套件且使用簡單的導航,功能強大且完備   回顧一下,react-navigation包含以下功能來幫助我們建立導航器: StackN

React Native入門篇—react-navigation路由配置

本人學習React Native沒有看過任何教學視訊,都是按照官網一步步學習的。只研究了Android開發,所以下面的教程都是Android開發教程。 注意:未經允許不可私自轉載,違者必究 React Native官方文件:https://reactnative.cn/docs

React Navigation 的使用基礎部分(四)向路由傳值

原文連結還記得我們之前說過"我們講引數的時候會詳細說明"嗎?是的,就是現在。現在我們知道怎樣建立一個包含若干路由的棧導航器,還知道了在路由之間跳轉,現在讓我們來看看跳轉時怎樣向路由傳遞資料。有兩點:可以將引數放進物件中,作為navigation.navigate的第二個引數來

React Navigation--Stack Navigator and Tab Navigator聯合使用

/** * Created by YiBing on 2017/5/4. */ import React from 'react'; import { AppRegistry, Text, Button, View, } from 'r

react-navigation的多次點擊重復跳轉同一頁面、不在堆棧路由頁面使用navigation方法的解決思路

xtend iss 需要 點擊 定義 cti 並不是 navi 而是 一、react-navigation的初使用 createStackNavigator ==> createSwitchNavigator ==> createAppContaine

react-navigation android 導航標題居中

mmu github tile reac oid comm and roi image 先貼下代碼供參考: 安卓默認導航的titile 是在左側的,為了和iOS保持一致,需要添加 alignSelf:‘center‘,這個 屬性 但是會遇到title有點偏右的情況 添

FPGA中亞穩態相關問題及時鐘域處理

設計 時鐘 比特 產生 solution 至少 nbsp 觸發器 路徑規劃 前言 觸發器輸入端口的數據在時間窗口內發生變化,會導致時序違例。觸發器的輸出在一段時間內徘徊在一個中間電平,既不是0也不是1。這段時間稱為決斷時間(resolution time)。經過resolu

react navigation傳值給上一頁面

reac 組件 .get value cto oba info state getpara 使用新的導航組件react navigation,傳值方式略微發生了一些改變 A頁面到B頁面 pushaddremark(){ let _this=this;

react-navigation

ret enable ons mil 滑動切換 定義 使用 one animation TabNavigator的使用   定義一個整體的tab屬性 import {TabNavigator,StackNavigator,TabBarBottom} from ‘re

React Navigation-(Qucik Start)快速開始

const 例如 json 抽屜 開始 新的 ans tail pos 快速開始 要開始使用React Navigation,您只需安裝 react-navigation npm包 npm install --save react-navigation yarn add

react-native導航器 react navigation 介紹

開發環境搭建 部署 ica sam native 找不到 組件 getting start 開發環境搭建好之後,想要進一步了解react-native,可以先從react-native官網上的電影列表案例入手: https://reactnative.cn/docs/0

react-navigation 簡介

tor 方式 一個 justify 深度 哪些 區別 view avi StackNavigator: 原理和瀏覽器相似但又有局限,瀏覽器的方式是開放性的,通過點擊一個鏈接可以跳轉到任何頁面(push),點擊瀏覽器後退按鈕,返回到前一個頁面(pop)。StackNavig

Django 域請求處理

中間件 不同 解決 span http als todo 分享 title 參考https://blog.csdn.net/qq_27068845/article/details/73007155 http://blog.51cto.com/aaronsa/2071108

ajax域的處理方法

type callback xhtml header 文件 處理 相同 jsonp 服務器 當我們在開發項目的時候,一般我們會使用ajax請求數據,但是在使用ajax的時候會出現跨域的問題。 為什麽會出現跨域的問題呢? 跨域的問題的出現是來源於JavaScript的同源策略

react中鍵盤enter事件處理

ons rip form tde RM react nbsp 實現 classname 對於常見的搜索需求業務場景,用戶輸入完成後,點擊enter事件請求數據,要求不提交頁面,實現數據局部更新,這需要用到react中的表單Forms。 處理方法: (1)html書寫 for

react-router 4.x 路由按需加載

HA sync tac roo ID rem route RR fig react-router 4 代碼分割(按需加載) 官方文檔 https://serverless-stack.com/chapters/code-splitting-in-create-react-

react-navigation設置navigationOptions中Static中使用 this 的方法

IT 需要 target style ati ams screen AR 操作 使用react-navigation時,單頁面設置navigationOptions中,進行Static中 調用this 中的方法或值時,需要做如下操作 static naviga

react axios 域問題

douban 問題 base bpa 文件創建 eee ade orm for 周末又是補充知識點的時候了,用了react axios 跨越問題,貌似是要比vue 稍微麻煩一點 它請求http好像是沒有問題的,但是https還是有跨域問題的, 我用的剛好是create-re