ReactNative——頁面跳轉

来源:http://www.cnblogs.com/Harold-Hua/archive/2016/09/28/React-Native_Navigator.html
-Advertisement-
Play Games

效果圖: 進入工作目錄,運行 react-native init NavigatorProject 創建項目NavigatorProject 延伸:傳參。 以上面的代碼為基礎。 一: 效果圖: 二: 效果圖: ...


效果圖:

 

進入工作目錄,運行

react-native init NavigatorProject

創建項目NavigatorProject

 

 

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  TouchableHighlight,
  Image,
  Navigator
} from 'react-native';

 

class navigatorProject extends Component{
    render(){
        let defaultName = 'firstPageName';
        let defaultComponent = FirstPageComponent;
        return(             <Navigator                 initialRoute = {{name: defaultName, component: defaultComponent}}  //初始化導航器Navigator,指定預設的頁面                 configureScene = {                     (route) => {                         return Navigator.SceneConfigs.FloatFromRight;  //配置場景動畫,頁面之間跳轉時候的動畫                     }                 }                 renderScene = {                     (route, navigator) =>{                         let Component = route.component;                         return <Component{...route.params} navigator = {navigator} />  //渲染場景                     }                 }             />         );     } }

 

//第一個頁面

class FirstPageComponent extends Component{
    clickJump(){
        const{navigator} = this.props;
        if(navigator){
            navigator.push({  //navigator.push 傳入name和你想要跳的組件頁面
                name: "SecondPageComponent",
                component: SecondPageComponent
            });
        }  
    }

    render(){
        return(
            <View style = {styles.container}>
                <Text>我是第一個頁面</Text>
                <TouchableHighlight
                    underlayColor = "rgb(180,135,250)"
                    activeOpacity = {0.5}
                    style = {{
                        borderRadius: 8,
                        padding: 8,
                        marginTop: 8,
                        backgroundColor: "#F30"
                    }}
                    onPress = {this.clickJump.bind(this)}>
                    <Text>點擊進入第二個頁面</Text>
                </TouchableHighlight>
            </View>
        );
    }
}

 

//第二個頁面

class SecondPageComponent extends Component{
    clickJump(){
        const{navigator} = this.props;
        if(navigator){
            navigator.pop();  //navigator.pop 使用當前頁面出棧, 顯示上一個棧內頁面.
        }
    }

    render(){
        return(
            <View style = {styles.container}>
                <Text>我是第二個頁面</Text>
                <TouchableHighlight
                    underlayColor = "rgb(180, 135, 250)"
                    activeOpacity = {0.5}
                    style = {{
                        borderRadius: 8,
                        padding: 8,
                        marginTop: 5,
                        backgroundColor: "#F30"
                    }}
                    onPress = {this.clickJump.bind(this)}>
                    <Text>點擊返回第一個頁面</Text>
                </TouchableHighlight>
            </View>
        );
    }
}

 

const styles = StyleSheet.create({
 container: {
  flex: 1,
  justifyContent: 'center',
  alignItems: 'center',
  backgroundColor: '#FFFFFF',
 },
});

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

 

 

延伸:傳參。

以上面的代碼為基礎。

 

一:

效果圖:

 

//第一個界面
class FirstPageComponent extends Component{
    constructor(props){
        super(props);
        //參數來源
        this.state = {
            author: '華帥'
        };
    }

    clickJump(){
        const{navigator} = this.props;
        if(navigator){
            navigator.push({
                name: "SecondPageComponent",
                component: SecondPageComponent,
                //傳遞參數,入棧
                params: {
                    author: this.state.author,
                }
            });
        }
    }

    render(){
        return(
            <View style = {styles.container}>
                <Text>我是第一個頁面</Text>
                <TouchableHighlight
                    underlayColor = "rgb(180, 135, 250)"
                    activeOpacity = {0.5}
                    style = {{
                        borderRadius: 8,
                        padding: 8,
                        marginTop: 8,
                        backgroundColor: "#F30"
                    }}
                    onPress = {this.clickJump.bind(this)} >
                    <Text>點擊進入第二個頁面</Text>
                </TouchableHighlight>
            </View>
        );
    }
}

 

//第二個頁面
class SecondPageComponent extends Component{
    constructor(props) {
        super(props);
        this.state = {};
    }

    //接收傳遞過來的參數
    componentDidMount() {
        this.setState({
            author: this.props.author,
        });
    }

    clickJump(){
        const{navigator} = this.props;
        if(navigator){
            navigator.pop();
        }
    }

    render(){
        return(
            <View style = {styles.container}>
                <Text>我是第二個頁面</Text>
                <TouchableHighlight
                    underlayColor = "rgb(180, 135, 250)"
                    activeOpacity = {0.5}
                    style = {{
                        borderRadius: 8,
                        padding: 8,
                        marginTop: 5,
                        backgroundColor: "#F30"
                    }}
                    onPress = {this.clickJump.bind(this)}>
                    <Text>點擊返回第一個頁面</Text>
                </TouchableHighlight>
                <Text>作者是:{this.state.author}</Text>
            </View>
        );
    }
}                    

 

 

二:

效果圖:

 

//第一個頁面

class FirstPageComponent extends Component{

    constructor(props){
        super(props);
        //參數來源
        this.state = {
            author: "華帥",
            id: 1,
            user: null,
        };
    }

    clickJump(){
        const{navigator} = this.props;
        const self = this;
        if(navigator){
            navigator.push({
                name: "SecondPageComponent",
                component: SecondPageComponent,
                //傳遞參數,入棧
                params:{
                    author: this.state.author,
                    id: this.state.id,
                    //從第二頁獲取user
                    getUser: function(user){
                        self.setState({
                            user: user
                        });
                    }
                }
            });
        }
    } render(){
if(this.state.user){ return( <View> <Text style = {styles.container}>用戶信息:{JSON.stringify(this.state.user)}</Text> </View> ); }else{ return( <View style = {styles.container}> <Text>我是第一個頁面</Text> <TouchableHighlight underlayColor = "rgb(180, 135, 250)" activeOpacity = {0.5} style = {{ borderRadius: 8, padding: 8, marginTop: 8, backgroundColor: "#F30" }} onPress = {this.clickJump.bind(this)}> <Text>點擊進入第二個頁面</Text> </TouchableHighlight> </View> ); } } }

 

 

const USER_MODELS = {
    1: {name: '華帥', age: 44},
    2: {name: '小明', age: 12}
};

 

//第二個頁面

class SecondPageComponent extends Component{
    constructor(props){
        super(props);
        this.state = {
            id:null
        };
    }

    //接收傳遞過來的參數
    componentDidMount(){
        this.setState({
            author: this.props.author,
            id: this.props.id,
        });
    }

    clickJump(){
        const{navigator} = this.props;
        if(this.props.getUser){
            let user = USER_MODELS[this.props.id];
            this.props.getUser(user);
        }

        if(navigator){
            navigator.pop();
        }
    }

    render(){
        return(
            <View style = {styles.container}>
                <Text>我是第二個頁面</Text>
                <Text>ID: {this.state.id}</Text>
                <TouchableHighlight
                    underlayColor = "rgb(180, 135, 250)"
                    activeOpacity = {0.5}
                    style = {{
                        borderRadius: 8,
                        padding: 8,
                        marginTop: 5,
                        backgroundColor: "#F30"
                    }}
                    onPress = {this.clickJump.bind(this)}>
                    <Text>點擊返回第一個頁面</Text>
                </TouchableHighlight>
                <Text>作者是:{this.state.author}</Text>
            </View>
        );
    }
}

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要: 最近很多阿裡內部的同學和客戶私信來咨詢如何學習 Docker 技術。為此,我們列了一個路線圖供大家學習Docker和阿裡雲容器服務。這個列表包含了一些社區的優秀資料和我們的原創文章。我們會隨著Docker技術的發展持續更新本文,也會在雲棲社區繼續貢獻內容來幫助同學們快速入門或持續提高。 Do... ...
  • 背景 現在的web系統已經越來越多的應用緩存技術,而且緩存技術確實是能實足的增強系統性能的。我在項目中也開始接觸一些緩存的需求。 開始簡單的就用jvm(java托管記憶體)來做緩存,這樣對於單個應用伺服器來說很好。 為了系統的可用性,需要做災備,那麼就要多準備一套系統環境,這時就會有一些共用資源的問題 ...
  • 在JavaScript代碼有很多單鏈表形式的代碼,如if_else,switch等,倘若我們想將其如同Promise一樣扁平化處理呢?下麵我們就一起來看看唄~ ...
  • JS HTML DOM 改變 HTML 輸出流 JavaScript 能夠創建動態的 HTML 內容: 今天的日期是: Sat Sep 24 2016 15:06:50 GMT+0800 (中國標準時間) 在 JavaScript 中,document.write() 可用於直接向 HTML 輸出流 ...
  • 今天簡單寫一點關於瀏覽器相容的處理方法,雖然百度上已經有很多,但是我還是要寫! 先看一個圖 這個圖描述了2016年1月至8月網民們所使用的瀏覽器市場份額(來源:http://tongji.baidu.com/data/browser)。令我感到欣慰的是chrome排第一,chrome一直以來對W3C ...
  • 前段時間看了某個平臺的後臺,發現訂單顯示使用的canvas進行繪畫,直觀,明瞭的表達出了訂單的走勢如下 所以自己心癢癢的,就自己模仿了一個-->貼上代碼 效果如下 參考教材:http://blog.csdn.net/clh604/article/details/8536059 http://www. ...
  • 自己學習了一下canvas濾鏡 編寫一個簡單的小界面,嘿嘿! 註釋都在裡面啦啦啦,感興趣的來瞅瞅哦😯 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #wrap ...
  • [1]html() [2]text() [3]val() [4]總結 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...