react-native使用react-navigation进行页面跳转导航的示例


Posted in Javascript onSeptember 07, 2017

首先要确认已经配置好react-native的环境。

# 创建一个native应用,SimpleApp,然后进入项目目录
react-native init SimpleApp
cd SimpleApp


# 通过npm安装最新版本的react-navigation
npm install --save react-navigation


# 运行程序
react-native run-android

引入Stack Navigator

对于我们的应用程序,我们想要使用堆栈式导航器,因为我们想要一个概念的“堆栈”导航,其中每个新屏幕都放在堆栈顶部,然后从堆栈顶部移除一个屏幕。

import React from 'react';
import {
 AppRegistry,
 Text,
} from 'react-native';
import { StackNavigator } from 'react-navigation';

class HomeScreen extends React.Component {
 static navigationOptions = {
  title: 'Welcome world',
 };
 render() {
  return <Text>Hello, Navigation!</Text>;
 }
}
const SimpleApp = StackNavigator({
 Home: { screen: HomeScreen },
});

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

屏幕的title在静态导航选项中是可配置的,在这里可以设置许多选项来配置导航器中的屏幕显示。

添加一个新的屏幕

class ChatScreen extends React.Component {
 static navigationOptions = {
  title: 'Chat with Lucy',
 };
 render() {
  return (
   <View>
    <Text>Chat with Lucy</Text>
   </View>
  );
 }
}

然后在HomeScreen添加一个按钮,链接到ChatScreen

class HomeScreen extends React.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 SimpleApp = StackNavigator({
 Home: { screen: HomeScreen },
 Chat: { screen: ChatScreen },
});

在这里,可以传递参数,从HomeScreen传递

class HomeScreen extends React.Component {
 static navigationOptions = {
  title: 'Welcome',
 };
 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接收参数

class ChatScreen extends React.Component {
 // Nav options can be defined as a function of the screen's props:
 static navigationOptions = ({ navigation }) => ({
  title: `Chat with ${navigation.state.params.user}`,
 });
 render() {
  // The screen's current route is passed in to `props.navigation.state`:
  const { params } = this.props.navigation.state;
  return (
   <View>
    <Text>Chat with {params.user}</Text>
   </View>
  );
 }
}

添加第三个页面,Three.js, ChatScreen跳转到Three

import React,{Component} from 'react';
import {
 AppRegistry,
 Text,
 View,
 Button,
} from 'react-native';

class Three extends React.Component {
 static navigationOptions = {
  title: 'Three Sceen',
 };
 render() {
  const { goBack } = this.props.navigation;
  return (
   <Button
    title="Go back"
    onPress={() => goBack()}
   />
  );
 }
}
export default Three;

修改ChatScreen的配置

class ChatScreen
extends React.Component {

static navigationOptions = {

title: 'Chat with Lucy',

};

render() {

const { navigate } =
this.props.navigation;

return (

<View>

<Text>Chat with Lucy</Text>

<Button

onPress={() =>
navigate('Three')}

title="to to ThreeScreen"

/>

</View>

);

}

}

最后的结果如下:

react-native使用react-navigation进行页面跳转导航的示例 

react-native使用react-navigation进行页面跳转导航的示例 

react-native使用react-navigation进行页面跳转导航的示例 

最后给出完整代码

文件 index.android.js

import SimpleApp
from './App';

文件App.js

import React
from 'react';

import {

AppRegistry,

Text,

View,

Button,

} from 'react-native';

import { StackNavigator }
from 'react-navigation';

import ThreeScreen
from './Three.js';

 

class HomeScreen
extends React.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>

);

}

}

 

class ChatScreen
extends React.Component {

static navigationOptions = {

title: 'Chat with Lucy',

};

render() {

const { navigate } =
this.props.navigation;

return (

<View>

<Text>Chat with Lucy</Text>

<Button

onPress={() =>
navigate('Three')}

title="to to ThreeScreen"

/>

</View>

);

}

}

 

const SimpleApp =
StackNavigator({

Home: { screen:
HomeScreen },

Chat: { screen:
ChatScreen },

Three: { screen:
ThreeScreen},

});

 

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

文件Three.js

import React,{Component}
from 'react';

import {

AppRegistry,

Text,

View,

Button,

} from 'react-native';

 

class Three
extends React.Component {

static navigationOptions = {

title: 'Three Sceen',

};

render() {

const { goBack } =
this.props.navigation;

return (

<Button

title="Go back"

onPress={() =>
goBack()}

/>

);

}

}

export default
Three;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
Jul 06 Javascript
AngularJS HTML DOM详解及示例代码
Aug 17 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
Node.js数据库操作之查询MySQL数据库(二)
Mar 04 Javascript
js实现canvas图片与img图片的相互转换的示例
Aug 31 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
JS使用贪心算法解决找零问题示例
Nov 27 Javascript
Vue.js数字输入框组件使用方法详解
Oct 19 Javascript
JavaScript ES6的函数拓展
Jan 18 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 #Javascript
vue数字类型过滤器的示例代码
Sep 07 #Javascript
vue监听scroll的坑的解决方法
Sep 07 #Javascript
react高阶组件经典应用之权限控制详解
Sep 07 #Javascript
React + webpack 环境配置的方法步骤
Sep 07 #Javascript
微信小程序之页面拦截器的示例代码
Sep 07 #Javascript
基于js粘贴事件paste简单解析以及遇到的坑
Sep 07 #Javascript
You might like
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
vue实现计步器功能
2019/11/01 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python 3.x 新特性及10大变化
2015/06/12 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
基于Python正确读取资源文件
2020/09/14 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
英国现代市场:ARKET
2019/04/10 全球购物
给领导的致歉信范文
2014/01/13 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
花店创业计划书范文
2014/02/07 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
校庆标语集锦
2014/06/25 职场文书
员工趣味活动方案
2014/08/27 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
科学发展观标语
2014/10/08 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Python集合的基础操作
2021/11/01 Python