React Native 页面之间传值、回传数据

2023-12-18 22:38

本文主要是介绍React Native 页面之间传值、回传数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很多同行最近都在苦思冥想一个问题:RN从A页面传值到B页面简单,但是我怎么从B页面传值到A页面呢,头大了!

http://blog.csdn.net/liu__520/article/details/52886493

下面我写了一个简单的示例,请各位同行参考下:

首先分三个页面:index.Android.js,first.js(简称A页面),next.js(简称B页面)

一、我们知道从A页面到B页面,是在navigator里面把值放进去,作为B页面的参数,B页面通过属性值获得这个参数:

下面这是index.android.js的内容

import React, { Component } from 'react';
import {
  AppRegistry,
  Navigator
} from 'react-native';


import FirstPage from './first';
class First extends Component {
  constructor(props){
    super(props);
    this.state={
      name:'刘成',
      age:28,
      QQ:null
    }
  }
  render() {
    let defaultName = 'firstpage';
    let defaultComponent = FirstPage;
    return (
      <Navigator
       initialRoute={{name:defaultName,component:defaultComponent}}
       renderScene={
         (route,navigator)=>{
           let Component = route.component;
           return <Component {...route.params} navigator={navigator}/>
         }
       }/>
    );
  }
}
AppRegistry.registerComponent('first', () => First);


下面这是first.js(A页面)的内容

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
import Next from './next';
export default class FirstPage extends Component {
  constructor(props){
    super(props);
    this.state={
      myname:'刘成',
      age:28,
      QQ:null,
    }
  }
  render() {
    return (
      <View style={styles.Container}>
        <Text style={styles.welcome}>
          第一页,我要把我的姓名、年龄传递给第二个页面,再从第二个页面把我的QQ号传回来
        </Text>
        <Text style={styles.instructions}>
          我的姓名:{this.state.myname}
        </Text>
        <Text style={styles.instructions}>
          我的年龄:{this.state.age}
        </Text>


        <Text style={{color:'blue',fontSize:20}}>
          我的QQ:{this.state.QQ}
        </Text>
        <Text style={{color:'red',fontSize:30}} onPress={this.gotoSecondPage}>
          点击我查询我的QQ
        </Text>
      </View>
    );
  }
  gotoSecondPage=()=>{
    const {navigator}=this.props;
    if (navigator) {
      navigator.push({
        name:'next',
        component:Next,
        params:{
          myname:this.state.myname,
          age:this.state.age,
          getQQ:(qq)=>{
            this.setState({
              QQ:qq
            })
          }
        }
      })
    }
  }
}


const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

下面这是next.js(B页面)的内容


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


export default class Next extends Component {
  constructor(props){
    super(props);
    this.state={
      myname:this.props.myname,
      age:this.props.age,
      QQ:674668211
    }
  }
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          第二页,把他的QQ号告诉他
        </Text>
        <Text style={styles.instructions}>
          我的姓名:{this.props.myname}
        </Text>
        <Text style={styles.instructions}>
          我的年龄:{this.props.age}
        </Text>


        <Text style={styles.instructions}>
          我的QQ:{this.state.QQ}
        </Text>
        <Text style={{color:'red',fontSize:30}} onPress={this.gotoFirstPage}>
          回到上一页
        </Text>
      </View>
    );
  }
  gotoFirstPage=()=>{
    const {navigator}=this.props;
    let QQ = this.state.QQ;
    this.props.getQQ(QQ);
    if (navigator) {
      navigator.pop();
    }
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});



首先:我把我的姓名和年龄传值给B页面,然后把B页面我的QQ传递到A页面,

A页面在navigator里面给一个参数:getQQ,这个参数的值是一个方法,方法里面又有一个参数qq,方法体的内容是把A页面的QQ的状态设置为qq的值;

下面我们要从B页面获得这个qq参数值:

gotoSecondPage=()=>{
    const {navigator}=this.props;
    if (navigator) {
      navigator.push({
        name:'next',
        component:Next,
        params:{
          myname:this.state.myname,
          age:this.state.age,
          getQQ:(qq)=>{
            this.setState({
              QQ:qq
            })
          }
        }
      })
    }
  }

首先在B页面pop之前,我们给B页面的属性getQQ一个值,B页面的getQQ这个属性就是从A页面传过来的,这个属性其实就是一个函数,函数的参数就是B页面的QQ值

gotoFirstPage=()=>{
    const {navigator}=this.props;
    let QQ = this.state.QQ;
    this.props.getQQ(QQ);
    if (navigator) {
      navigator.pop();
    }
  }


这样我们就把QQ值传递给A页面:




这篇关于React Native 页面之间传值、回传数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510006

相关文章

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用