《React Native移动开发实战》一一3.7 二级页面的跳转——TouchableOpacity组件

3.7 二级页面的跳转——TouchableOpacity组件
理解了Navigator的基本用法之后,下一步,添加一个新的组件,以便实现二级页面跳转的效果。
(1)添加新的文件detail.js,并在该文件中创建detail组件,代码如下:

01    import React, {Component} from 'react';
02    import {StyleSheet, View, Text} from 'react-native';
03
04    export default class detail extends React.Component {
05        render() {
06            return (
07                <View style={styles.container}>
08                    <Text style={styles.text}>
09                        详情页面
10                    </Text>
11                </View>
12            );
13        }
14    }
15
16    const styles = StyleSheet.create({
17        container: {
18            flex: 1,backgroundColor: 'gray',
19            justifyContent: 'center',
20            alignItems: 'center'
21        },
22        text: {
23            fontSize: 20
24        }
25    });

(2)在首页中修改按钮响应,添加跳转到下一个页面的入口。修改home.js中_renderRow的代码如下:

01    export default class home extends React.Component {
02         // 这里省略了没有修改的代码
03
04        _renderRow = (rowData, sectionID, rowID) => {
05            return (
06                <TouchableHighlight onPress={() => {
07                    const {navigator} = this.props; // 从props获取navigator
08                    if (navigator) {
09                        navigator.push({name: 'detail', component: Detail});
10                    }
11                }}>
12                    <View style={styles.row}>
13                        <Image source={rowData.image}
14                            style={styles.productImage}></Image>
15                        <View style={styles.productText}>
16                            <Text style={styles.productTitle}>{rowData.title}
                             </Text>
17                            <Text style={styles.productSubTitle}>{rowData.
                           subTitle}</Text>
18                        </View>
19                    </View>
20                </TouchableHighlight>
21            );
22        }
23    }

在使用this.props.navigator获取Navigator之后,可以使用Navigator的如下接口来进行场景的切换。
? push(route):跳转到新的场景,并且将场景入栈。
? pop:跳转到上一个场景,并且将当前场景出栈。
? popToRoute(route):pop到路由指定的场景,在整个路由栈中,处于指定场景之后的场景都将会被卸载。
? popToTop():pop到栈中的第一个场景,卸载其他的所有场景。
? replace(route):用一个新的路由替换掉当前场景。
? replaceAtIndex(route, index):替换指定序号的路由场景。
? replacePrevious(route):替换上一个场景。
? 其他方法:jumpBack()、jumpForward()、jumpTo(route)以及resetTo(route)等。
此时重新加载应用,然后单击商品列表,这样就可以跳转到下一个页面了,如图3.29所示。

图3.29 二级详情页面
(3)那么如何返回到上一个页面呢?答案就是使用Navigator的pop()方法。修改detail.js代码如下:

01    import React, {Component} from 'react';
02    import {StyleSheet, View, Text, TouchableOpacity} from 'react-native';
03
04    export default class detail extends React.Component {
05        render() {
06            return (
07                <View style={styles.container}>
08                    <TouchableOpacity onPress={this._pressBackButton.bind
                     (this)}>
09                        <Text style={styles.back}>返回</Text>
10                    </TouchableOpacity>
11                    <Text style={styles.text}>
12                        详情页面
13                    </Text>
14                </View>
15            );
16        }
17
18        _pressBackButton() {
19            const {navigator} = this.props;
20            if (navigator) {
21                navigator.pop();
22            }
23        }
24    }
25
26    const styles = StyleSheet.create({
27        // 这里省略了没有修改的代码
28        back: {
29            fontSize: 20,
30            color: 'blue'
31        }
32    });

为了实现“返回”按钮功能,除了本书前面介绍的Button和TouchableHighlight组件,这里使用了一个类似TouchableHighlight的新组件TouchableOpacity。TouchableOpacity同样用于封装组件,使其可以正确响应触摸操作。除此之外,React Native的Touchable*组件还有TouchableNativeFeedback以及TouchableWithoutFeedback,它们到底有什么区别呢?
? TouchableHighlight:单击该组件后,该组件的不透明度会降低同时会看到相应的颜色(视图变暗或者变亮)。
? TouchableOpacity:单击该组件后,封装的组件的不透明度会降低。这个过程并不会真正改变组件层级,大部分情况下很容易添加到应用中而不会带来副作用。
? TouchableNativeFeedback:只支持Android平台,在Android平台上该组件可以使用原生平台的状态资源来显示触摸状态变化。
? TouchableWithoutFeedback:单击该组件后,该组件没有任何反应和变化,所以不推荐使用。
此时,重新加载应用,然后单击图3.30中的“返回”按钮可以返回到首页了。
?提示:更多页面间的跳转和动画内容限于篇幅,这里不再一一详细介绍,感兴趣的读者可以自己修改代码体验效果。

时间: 2024-08-03 17:19:45

《React Native移动开发实战》一一3.7 二级页面的跳转——TouchableOpacity组件的相关文章

《React Native移动开发实战》一一导读

前言 随着手机和移动互联网技术的日益成熟,移动应用的领域也从如何开发,发展到如何更高效.更低成本地开发.传统的原生平台(iOS.Android)开发技术虽然比较成熟,但由于开发效率和成本的限制,已经越来越无法满足移动互联网应用的开发需求. 所以,具有简单.迅速.跨平台的优势,而且基于Web开发语言和布局技术的React Native得以迅速流行,并一举夺得跨平台开发技术的头筹. 目前市场上大多数React Native书籍主要以翻译和讲解官方文档为主,并未从开发实际应用出发,通过典型案例来指导读

《React Native移动开发实战》出版啦

对不起,我来晚了 首先要感谢支持和关注我的朋友,感谢人邮的赵老师,还有公司的领导和同事,他们在我写作的过程中给了很多有用的信息,也给了很多有用的建议,为本书的写作提供了很大帮助.感谢,再次感谢!!! 工作6年多以来,一直想写一本自己的书,一方面是对自己工作经历的一个总结,也是对希望写一本书给曾经的自己一个交代,毕竟30岁的人了,搞不了几年的技术了. 我一直有写博客的习惯,喜欢将自己工作和生活的点滴写成博客,分享给大家.说说我写书的缘由吧,最近几年,特别是15年和16年,我朋友圈的好友陆续出了自己

《React Native移动开发实战》一一1.3 搭建React Native开发环境

1.3 搭建React Native开发环境 "磨刀不误砍柴工",在正式开发React Native应用之前,需要先搭建好React Native的开发环境.搭建React Native开发环境有以下几个主要步骤. 原生开发工具:iOS开发使用Xcode,Android开发使用Android Studio and SDK Tools. Node.js(https://nodejs.org/):React Native是借助Node.js,即JavaScript运行时来创建JavaScr

《React Native移动开发实战》一一1.1 看透React Native

1.1 看透React Native React Native(http://facebook.github.io/react-native/)第一次进入公众的视野是在2015年1月的React.js Conf(http://conf.reactjs. org/)上,随后,同年5月份,Facebook在F8 Conference(https://www. fbf8.com/)上正式宣布:React Native项目(如图1.1所示) 在Github开源.结果一天之内,就收获了5000多颗星,受关

《React Native移动开发实战》一一1.2 React Native的特点

1.2 React Native的特点 那么,作为跨平台应用开发的"新贵",React Native相比其他跨平台技术到底有哪些优势呢?1.2.1 其一:Learn Once, Write Anywhere 这句话是React Native官网(http://facebook.github.io/react-native/)对React Native的概述,简单明了地概括了React Native的最大特点和优点. 只需要学习React Native这一种开发方式(包括平台.语言和开发

《React Native移动开发实战》一一1.5 小试牛刀——更改React Native项目源码

1.5 小试牛刀--更改React Native项目源码 应用虽然已经运行起来了,但是到现在还没有看到或修改任何代码,读者是不是觉得意犹未尽呢?下面就来看看React Native项目的源码吧. 打开index.ios.js文件,可以看到与显示在设备上内容直接相关的代码: 01 export default class ch02 extends Component { // 每个页面可以理解成一个组件 02 render() { // 渲染页面的函数 03 return ( 04 // 页面根V

《React Native移动开发实战》一一3.5 拖曳刷新列表——RefreshControl组件

3.5 拖曳刷新列表--RefreshControl组件 在3.4节中,我们完善了商品列表的功能:不仅优化了列表的布局,还添加了分割线等效果.不过,该App还缺少一个常用的功能,那就是拖曳刷新.虽然也可以添加一个"刷新"按钮用于响应用户请求,但是用户体验却没有拖曳好,而且,由于现在移动开发设备屏幕通常较小,额外添加按钮对界面设计影响也较大. ?小知识:用户体验(User Experience,简称UX或UE)是涉及一个人使用一个特定产品或系统或服务的有关行为.态度与情绪.用户体验包括实

《React Native移动开发实战》一一3.3 完善轮播广告——Image组件

3.3 完善轮播广告--Image组件 之前的轮播广告页面显示的是简单的文字和背景色,接下来添加一些好看的图片作为轮播广告. React Native中用于图片显示的组件是Image.Image组件可以显示多种不同类型图片,包括网络图片.静态资源.临时的本地图片,以及本地磁盘上的图片(如相册)等.3.3.1 使用网络图片 这里先使用网络图片来看看Image的用法和效果.修改app.js代码如下: 01 export default class app extends Component { 02

《React Native移动开发实战》一一1.4 第一个React Native应用

1.4 第一个React Native应用 颇费一番周折搭建好环境之后,终于可以长舒一口气,来开发第一个React Native应用了.1.4.1 初始化项目 首先,使用React Native命令行工具来初始化一个新的项目: react-native init ch02 等待工程创建成功并安装好所有依赖后,使用Atom打开ch02项目,来仔细瞧一瞧React Native项目结构,如图1.21所示. 图1.21 React Native项目结构 其中目录和文件的详细说明如表1.1所示. 回答: