当前位置: 首页 > news >正文

React Native移动开发实战-3-实现页面间的数据传递

React Native使用props来实现页面间数据传递和通信。在React Native中,有两种方式可以存储和传递数据:props(属性)以及state(状态),其中:

  • props通常是在父组件中指定的,而且一经指定,在被指定的组件的生命周期中则不再改变。

  • state通常是用于存储需要改变的数据,并且当state数据发生更新时,React Native会刷新界面。

了解了props与state的区别之后,读者应该知道,要将首页的数据传递到下一个页面,需要使用props。所以,修改home.js代码如下:

export default class home extends React.Component {
    // 这里省略了没有修改的代码

    _renderRow = (rowData, sectionID, rowID) => {
        return (
            <TouchableHighlight onPress={() => {
                const {navigator} = this.props;             // 从props获取navigator
                if (navigator) {
                    navigator.push({
                        name: 'detail',
                        component: Detail,
                        params: {
                            productTitle: rowData.title // 通过params传递props
                        }
                    });
                }
            }}>
                // 这里省略了没有修改的代码
            </TouchableHighlight>
        );
    }
}

在home.js中,为Navigator的push方法添加的参数params,会当做props传递到下一个页面,因此,在detail.js中可以使用this.props.productTitle来获得首页传递的数据。修改detail.js代码如下:

export default class detail extends React.Component {

render() {
    return (
        <View style={styles.container}>
            <TouchableOpacity onPress={this._pressBackButton.bind(this)}>
                <Text style={styles.back}>返回</Text>
            </TouchableOpacity>
            <Text style={styles.text}> 
                {this.props.productTitle}
            </Text>
        </View>
    );
}

// 这里省略了没有修改的代码

}

重新加载应用,当再次单击商品列表时,详情页面将显示单击的商品名称,效果如图3.31所示。
图片描述
图3.31 详情页面显示单击的商品名称

这样,一个完整的页面跳转和页面间数据传递的功能就实现了。
和我一起学吧,《React Native移动开发实战》

和我一起学吧,《React Native移动开发实战》
图片描述
图片描述

相关文章:

  • Java利用序列化实现对象的深拷贝
  • How to run Java main class and pass application arguments in Maven?
  • Swift2.0语言教程之函数嵌套调用形式
  • Java中Action层、Service层、Modle层和Dao层的功能区分
  • mongodb中直接根据某个字段更新另外一个字段值
  • mysql 索引
  • 收集尝试登录到服务器的密码尝试失败的ip和次数
  • 谁的属性值优先被访问
  • 字符串拼接性能比较出乎意料的结果
  • P1038 神经网络
  • 了解Job和JobDeatil ,JobDataMap (三)
  • linux shell编程中的数组定义、遍历
  • MySQL 的wait_timeout参数
  • 快递鸟 即时查询接口
  • mySql基础
  • 【译】JS基础算法脚本:字符串结尾
  • Google 是如何开发 Web 框架的
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 4. 路由到控制器 - Laravel从零开始教程
  • java中具有继承关系的类及其对象初始化顺序
  • scala基础语法(二)
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Yii源码解读-服务定位器(Service Locator)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 计算机在识别图像时“看到”了什么?
  • 离散点最小(凸)包围边界查找
  • 码农张的Bug人生 - 见面之礼
  • 一、python与pycharm的安装
  • 因为阿里,他们成了“杭漂”
  • Android开发者必备:推荐一款助力开发的开源APP
  • Java总结 - String - 这篇请使劲喷我
  • 积累各种好的链接
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ###项目技术发展史
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • ${factoryList }后面有空格不影响
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (zt)最盛行的警世狂言(爆笑)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (南京观海微电子)——COF介绍
  • (全注解开发)学习Spring-MVC的第三天
  • (转)Scala的“=”符号简介
  • (转)socket Aio demo
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • @requestBody写与不写的情况
  • @Responsebody与@RequestBody
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [GYCTF2020]Ez_Express
  • [Java并发编程实战] 共享对象之可见性
  • [LeetBook]【学习日记】获取子字符串 + 颠倒子字符串顺序