1. 程式人生 > >React Navigation 入門(二)

React Navigation 入門(二)

RN 版本:0.50
操作環境:Windows 10
React Navigation 版本:1.0.0-beta.20

在上一篇文章《StackNavigator 快速入門》中,介紹了 StackNavigator 的快速使用方法,本篇在其基礎上進行補充,對 StackNavigator 進行更加詳細的介紹。

StackNavigator 的介紹

我們依然是先寫個首頁用來展示:

export default class HomeScreen extends Component {

  static navigationOptions = {
    title: 'Welcome'
} render() { return <Text>Hello, Chat App!</Text>; } }

然後通過 StackNavigator 進行註冊:

const RootNavigator = StackNavigator({
  Home: {
    screen: HomeScreen,
  }
});

可以發現,這裡設定 title 的方式和上一篇不一樣了。上一篇中,我們在對 HomeScreen 進行註冊的時候進行了 headerTitle 的設定,就像下面這樣。

const RootNavigator = StackNavigator({
  Home: {
    screen: HomeScreen,
    navigationOptions: {
      headerTitle: 'Home'
} });

而在這篇文章中,我們把 navigationOptions 單獨拿了出來寫成了一個靜態變數。這種寫法也是可以的,當通過 StackNavigator 載入到 Home 頁面的時候,會自動找到這個變數讀取它的各個引數並應用在 Home 頁面上。就像元件的生命週期剛開始的時候會先讀取 static defaultProps 中的預設屬性。

另外在這裡 headerTitletitle 的效果是一樣的,都是頂部 ‘ToolBar’ 的標題。它們兩個具體有什麼區別,打算在下一篇文章再做介紹。效果圖直接用官網的。

我是官網效果圖

新增一個新的頁面

這個在上一篇文章也已經說過了,如果你看過上一篇文章,這裡隨便看看就好了。

我們新建一個 ChatScreen 頁面:

export default class ChatScreen extends Component {

  static navigationOptions = {
    title: 'Chat with Lucy',
  }

  render() {
    return (
        <View>
          <Text>Chat with Lucy</Text>
        </View>
    );
  }
}

然後在 HomeScreen 中新增一個按鈕使其被點選的時候能跳轉到 ChatScreen。這裡我們就要用到 navigate 方法並且給它填入正確的 routeName 引數,我們這裡定義的是 Chat

export default class HomeScreen extends Component {

  static navigationOptions = {
    title: 'Welcome'
  };

  render() {
    const {navigate} = this.props.navigation;
    return <View>
      <Text>Hello, Chat App!</Text>
      <Button
          onPress={() => navigate('Chat')}
          title="Chat with Lucy"
      />
    </View>
  }
}

當然了,最最重要的不要忘記了在 StackNavigator 中進行註冊:

const RootNavigator = StackNavigator({
  Home: {screen: HomeScreen},
  Chat: {screen: ChatScreen}
});

現在,我們點選按鈕就可以進行頁面之間的切換了。

我也是官網效果圖

傳遞引數

任何頁面之間的切換都避免不了引數的傳遞。還記得 navigate(routeName, params, action) 方法的第二個引數嗎?params 就是要傳遞的引數。

render() {
    const {navigate} = this.props.navigation;
    return <View>
      <Text>Hello, Chat App!</Text>
      <Button
          onPress={() => navigate('Chat', {user: 'Lucy'})}
          title="Chat with Lucy"
      />
    </View>
  }

這裡我們給 ChatScreen 傳遞了一個值為 ‘Lucy’ 的字串 user,然後就可以通過 this.props.navigation.state.params 來取到你想要的引數。

export default class ChatScreen extends Component {

  // Nav options can be defined as a function of the screen's props:
  // Nav options 可以被定義成一個頁面屬性的函式(原諒我英語太差)
  // 格式就像下面這樣,你就可以取到 navigation 了
  static navigationOptions = ({navigation}) => ({
    title: `Chat with ${navigation.state.params.user}`,
  });

  render() {
    // The screen's current route is passed in to `props.navigation.state`:
    // 螢幕當前的路由被傳遞給了 `props.navigation.state`
    const {params} = this.props.navigation.state;
    return (
        <View>
          <Text>Chat with {params.user}</Text>
        </View>
    );
  }
}
效果和上面一毛一樣

你可以改一下 user 的值,然後看看有什麼變化。

本文到此結束,下一篇打算詳細寫寫 StackNavigator 的各個屬性。

相關推薦

React Navigation 入門

RN 版本:0.50 操作環境:Windows 10 React Navigation 版本:1.0.0-beta.20 在上一篇文章《StackNavigator 快速入門》中,介紹了 StackNavigator 的快速使用

02 React快速入門——this的指向和資料修改問題

問題描述:       在react學習中,通過定義一個按鈕,然後為此按鈕繫結一個事件,此事件主要的功能就是使用者點選按鈕,就會在相應的頁面增加一個item選項。在程式碼層面來說,在程式碼裡的state下的list會增加一個數據,如下所示:  

React Navigation 入門

RN 版本:0.50 操作環境:Windows 10 React Navigation 版本:1.0.0-beta.20 前言 Navigator(導航器)是用來進行場景(頁面)切換的元件,但是由於它的各種缺陷,從 0.4

數字IC低功耗設計入門——功耗的分析

layout 變化 監視 merge obj source divide 傳播 總結   前面學習了進行低功耗的目的個功耗的構成,今天就來分享一下功耗的分析。由於是面向數字IC前端設計的學習,所以這裏的功耗分析是基於DC中的power compiler工具;更精確的功耗分析

React學習小結

display lin body -a 頁面 return 有時 borde size 一、組件的嵌套 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UT

react常見問題

radi ring str 嵌入 mat 相關 sage arch 人員 本部分主要為表單相關。 1.表單form的react使用流程。 A.引入antd插件,聲明FormItem import {Form} from ‘antd‘; const FormItem = Fo

Linux入門

man linux終端 linux發行版本 linux文件系統初步 google高級用法 Linux常用的基礎命令1.發行版本2.CISC、RISC3.編譯和反編譯(GPL、LGPL、BSD)4.程序包管理5.文件系統初步終端設備虛擬終端圖形終端串行終端偽終端Linux的哲學思想6.開源協

Docker入門

docker安裝 docker基礎命令 一、Docker相關概念1.Docker: namespace,cgroup: 解決方案: lxc,openvz lxc:linux containers docker最初就是lxc的封裝版本。 docker engine/docker server:輸

vue-cli入門——項目結構

常用 作用 寫到 www. 簡單的 端口 server 標簽 emp 前言 在上一篇項目搭建文章中,我們已經下載安裝了node環境以及vue-cli,並且已經成功構建了一個vue-cli項目,那麽接下來,我們來梳理一下vue-cli項目的結構。 總體框架 一個vue-c

log4j2使用入門——與不同日誌框架的適配

一個 slf4 core log4j 說明 不同 activemq 進行 -a 在上方中已經指出log4j2可以與不同的日誌框架進行適配,這裏舉一些實際應用進行說明: 1.比如我們在項目中使用了log4j2作為日誌器,使用了log4j-api2.6.2.jar和log4j

【轉】VBA編程入門

mat 復雜 任務 遙控 一次 環境 box range 使用 詳解VBA編程是什麽 由 vietdung90 創建,最後一次修改 2016-10-19 直到 90 年代早期,使應用程序自動化還是充滿挑戰性的領域.對每個需要自動化的應用程序,人們不得不學習一種不

Hibernate入門 三種狀態

依賴 區分 dia 讀取配置文件 hibernate conn null threads 定時 .大配置 方言 property name="dialect" 取值 自動構建表結構 property name="hbm2ddl" true con

PHP基礎入門【PHP函數基礎】

就是 進行 size 自定義 取地址 代碼 功能 sha 有一種 PHP基礎入門(二)——函數基礎 了解 PHP基礎入門詳解(一) 後,給大家分享一下PHP的函數基礎。 這部分主要講的就是: 函數的聲明與使用、PHP中變量的作用域、靜態變量、函數的參數傳遞、變量函數

開源性能測試工具JMeter快速入門

代碼 取模 .bat -h 斷言 調度 測試 格式 needed 目錄一、JMeter簡介二、JMeter功能介紹三、JMeter腳本四、關於JMeter小提示三、JMeter腳本1.測試計劃測試計劃是JMeter進行測試的起點 ,是其他JMeter測試元件的容器,每個測試

02-Linux基礎入門

... man sso term 創建文件系統 www. lease linux系統 結果 一、命令必須掌握的命令:man,touch,ls,mkdir,cp,rm,mv,echo,pwd,cat,alias,unalias,head,tail,tree,rmdir想拿到高

Hibernate入門

方式 分享 數據庫表 left use acl att commit cti 一、主鍵生成策略 1.主鍵的類型 自然主鍵: 把有特定業務含義的字段作為了主鍵 eg: 用戶的名字, 身份證號碼 代理主鍵: 把沒有特定業務含義的字段作為了主鍵 eg: id  開發

spring-data-jpa快速入門——簡單查詢

ref spa data mail domain event cif open 寫實 一、方法名解析   1.引言     回顧HelloWorld項目中的dao接口 public interface GirlRepository extends JpaRepos

react-native 學習

androi bsp ger net devel 瀏覽器 sim 百度 解決方法 上一節講到了 react-native的開發環境的配置,,這一節我門具體講講怎麽看樣式,怎麽調試 看樣式的話 有一個 神奇 react-native-developer tools(個人推薦,

Spring入門— IOC註解、Spring測試AOP入門

兩種 cts his 工作 source print 編程 實現機制 工廠 一、Spring整合Servlet背後的細節 1. 為什麽要在web.xml中配置listener <listener> <listener-class>org.s

TypeScript入門——函數新特性

轉化 index 例子 一半 func ets mat 方便 strong 一、TypeScript-Rest and Spread操作符 用來聲明任意數量的方法參數 ...args中的...就是Rest and Spread操作符。 例1: 聲明一個可以傳任意