详解react native页面间传递数据的几种方式


Posted in Javascript onNovember 07, 2018

1. 利用react-native 事件DeviceEventEmitter 监听广播

应用场景:

- 表单提交页面, A页面跳转到B页面选人, 然后返回A页面, 需要将B页面选择的数据传回A页面。
- 多个多媒体来回切换播放,暂停后二次继续播放等问题。

代码如下:

A页面

componentDidMount() {
 // 利用DeviceEventEmitter 监听 concactAdd事件
  this.subscription = DeviceEventEmitter.addListener('concactAdd', (dic) => {// dic 为触发事件回传回来的数据
   // 接收到 update 页发送的通知,后进行的操作内容
   if (dic.approver_list) {
    this.setState((preState: Object) => {
     this.updateInputValue(preState.approver_list.concat(dic.approver_list), 'approver_list');
     return { approver_list: preState.approver_list.concat(dic.approver_list) };
    });
   }
   if (dic.observer_list) {
    this.setState((preState: Object) => {
     this.updateInputValue(preState.observer_list.concat(dic.observer_list), 'observer_list');
     return { observer_list: preState.observer_list.concat(dic.observer_list) };
    });
   }
  });
...
componentWillUnmount() {
  this.subscription.remove();
}

B页面

// 触发concactAdd事件广播
handleOk = (names: []) => {
  const { field } = this.props;
  DeviceEventEmitter.emit('concactAdd', { [field]: names });
 }

2. 用react-navigation提供的路由之间

A页面

// 定义路由跳转函数 cb表示需要传递的回调函数
export const navigateToLinkman = (cb: Function, type?: string, mul?: boolean): NavigateAction =>
 NavigationActions.navigate({ routeName: 'Linkman', params: { cb, type, mul } });
 // 跳转选择人员页面
  handleSelectUser = () => {
   Keyboard.dismiss();
   this.props.actions.navigateToLinkman(this.selectedUser, '', true);
...
// 选择人员后的回调函数
selectedUser = (selectUser: string[]) => {
   this.setState((preState) => {
    const newEmails = preState.emails.concat(selectUser);
    const emails = [...new Set(newEmails)];
    return {
     emails,
    };
   });
  }

B页面

handleToUser = () => {
  ...
  navigation.state.params.cb(user.email, group);
  ...
}

3. 利用react-navigation 提供的路由事件监听触发事件

在A页面路由失去焦点的时候触发该事件

componentDidMount() { 
this.props.navigation.addListener('didBlur', (payload) => {
     if (this.modalView) this.modalView.close();
    });
  }

那么问题来了, 为何不在页面卸载(componentWillunmount)的时候触发该事件?

如果不了解react-native和react-navigation, 会很困惑, A页面卸载了, 为什么还能接收到来自B页面的数据或者事件, 原因是: react-navigation中, A页面跳转到B页面, A页面没有卸载, 只是在它提供的路由栈中堆积,例如A跳转到B中, A页面不执行componentWillunmount,当每一个路由pop掉的时候才会执行componentWillunmount, 卸载掉当前页面。

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

Javascript 相关文章推荐
extjs grid设置某列背景颜色和字体颜色的方法
Sep 03 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
给文字加上着重号的JS代码
Nov 12 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
浅谈JavaScript for循环 闭包
Jun 22 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
懒加载实现的分页&&网站footer自适应
Dec 21 Javascript
解决ie img标签内存泄漏的问题
Oct 13 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
Jan 29 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 Javascript
微信小程序使用npm支持踩坑
Nov 07 #Javascript
Angular Material Icon使用详解
Nov 07 #Javascript
详解Webpack loader 之 file-loader
Nov 07 #Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 #Javascript
javascript动态创建对象的属性详解
Nov 07 #Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 #Javascript
详解在vue-test-utils中mock全局对象
Nov 07 #Javascript
You might like
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
让您的菜单不离网站
2006/10/03 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
domReady的实现案例
2016/11/23 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python多线程扫描端口示例
2014/01/16 Python
python opencv之分水岭算法示例
2018/02/24 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
应届毕业生通用的自荐书范文
2014/02/07 职场文书
工作失职检讨书
2015/01/26 职场文书
付款证明格式范文
2015/06/19 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript