基于 react-navigation 父子组件的跳转链接

在父组件中引入子组件,这个时候通常直接使用 onPress 的跳转就会不起作用

正确的处理方法是,在组件中封装一个点击事件,然后在父组件中执行跳转的函数

正常的跳转方法是:

import React from ‘react‘;
import {
  StyleSheet,
  Text,
  View,
  Image,
  TouchableOpacity,
  ScrollView,
} from ‘react-native‘;

// navigator
import { StackNavigator } from ‘react-navigation‘;

// 引入组件 Cell
import CommonCell from ‘./commonCell‘;

export default class More extends React.Component {

    // 顶部导航
    static navigationOptions = ({ navigation }) => {
        const { navigate } = navigation;
        return {
            title: ‘更多‘,
            tabBarLabel: ‘更多‘,
            mode: ‘card‘,
            headerMode: ‘float‘,
            activeTintColor: ‘#000000‘,
        };
    };

    render() {
        const { navigate } = this.props.navigation;
        return (
            <View style={styles.container}>
                <ScrollView>

                    <View style={{marginTop: 14}}>
                        <TouchableOpacity
                            onPress={() => navigate(‘ShakeMode‘)}  // 跳转
                        >
                            <Text>点击震动手机</Text>
                        </TouchableOpacity>
                    </View>

                </ScrollView>
            </View>
        );
    }

}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: ‘#e8e8e8‘,
    },
});

如果引入了组件,在组件中要跳转,方法如下

父组件:

import React from ‘react‘;
  import {
    StyleSheet,
    Text,
    View,
    Image,
    TouchableOpacity,
    ScrollView,
  } from ‘react-native‘;

 // navigator
 import { StackNavigator } from ‘react-navigation‘;

 // 引入组件 Cell
 import CommonCell from ‘./commonCell‘;

 export default class More extends React.Component {

     // 顶部导航
     static navigationOptions = ({ navigation }) => {
         const { navigate } = navigation;
         return {
             title: ‘更多‘,
         };
     };

     render() {
         const { navigate } = this.props.navigation;
         return (
             <View style={styles.container}>
                 <ScrollView>
                     <View style={{marginTop: 14}} >
                         <CommonCell
                             nextClick={() => {this.endClick()}}
                             title="点击震动手机"
                         />
                     </View>

                 </ScrollView>
             </View>
         );
     }

     // 控制跳转
     endClick() {
         const { navigate } = this.props.navigation;
         navigate(‘ShakeMode‘)
     }

 }

 const styles = StyleSheet.create({
     container: {
         flex: 1,
         backgroundColor: ‘#e8e8e8‘,
     },
});

引入组件

CommonCell,并将方法 nextClick = endClick,
endClick执行跳转的方法,
nextClick 传递给子组件子组件
render() {
        return (
            <TouchableOpacity
                onPress={this.props.nextClick}
            >
                <View style={styles.container}>

                    {/**左边**/}
                    <Text style={{marginLeft: 10}}>{this.props.title}</Text>

                    {/**右边 返回什么需要判断 **/}
                    {this.renderRightView()}

                </View>
            </TouchableOpacity>
        );
    }

  这样就可以实现跳转了

时间: 2024-08-02 16:13:27

基于 react-navigation 父子组件的跳转链接的相关文章

基于React的Tab组件

基于React的Tab组件 Tabs renderHeader = () => { return React.Children.map( this.props.children , (element,index) => { const activeStyle = element.key === this.state.activeKey ? "activeTitle" : null; return ( <span onClick={() => { this.set

React的父子组件生命周期

父子组件生命周期: “生命周期”细想之下有点浪漫主义色彩,不知道是不是从lifecycle英译过来的.作为一个前端从业者,如果让我来取,可能会取成“渲染周期”之类的,毕竟是和浏览器打交道的职业,浏览器的layout使dom树具有骨架,paint则让整个页面光亮起来. React 的一切都是组件,通过 React.createElement 方法来创建嵌套层级,说白了在内存中构建对象树,据此渲染到浏览器中成为dom树,这个时候一个节点是什么时候真正渲染到页面中就变得重要起来,因为只有这个时候你才能

React中父子组件通信

本篇文章我们来学习组件之间的通信,继续以上篇文章中提到的 添加并展示商品列表 为案例,将其功能复杂化为一个小购物车案例,即拆分一个购物车列表的子组件,跟购物车父组件进行通信. 父组件传值给子组件,通过 props 传值 1.在 src -> components 文件夹中,新建子组件 Cart.js ,我们创建基于类的子组件,父组件传过来的值通过 this.props 调用中,具体代码如下: import React, { Component } from 'react'; // 基于类的组件

react.js 父子组件数据绑定实时通讯

import React,{Component} from 'react' import ReactDOM from 'react-dom' class ChildCounter extends Component{ render(){ return( <div style={{border:'1px solid red'}}> {this.props.count} </div> ) } } /* * 大家默认规定的一些步骤,方便大家看 * 1.默认值 * 2.初始化状态 * 3.

[js高手之路]Vue2.0基于vue-cli+webpack父子组件通信教程

在git命令行下,执行以下命令完成环境的搭建: 1,npm install --global vue-cli  安装vue命令行工具 2,vue init webpack vue-demo   使用vue命令生成一个webpack项目,项目名称为vue-demo 3,cd vue-demo 切入项目 4,npm install安装package.json中的所有依赖包 5,npm run dev运行项目 一.父组件向子组件传递数据 然后删除默认的Hello.vue组件,把App.vue整理成以下

React 组件基本使用(3) ---父子组件之间的通信

当有多个组件需要共享状态的时候,这就需要把状态放到这些组件共有的父组件中,相应地,这些组件就变成了子组件,从而涉及到父子组件之间的通信.父组件通过props 给子组件传递数据,子组件则是通过调用父组件传给它的函数给父组件传递数据. 很简单的一个例子,我们在输入框中输入温度,输入框下面显示冷和热.这里就有两个组件,输入框和它下面的显示内容,且它们共享一个状态,就是温度.所以我们要把温度这个状态放到这两个组件的父组件中.这里就有三个组件,一个输入框TemperatureInput,  一个是显示内容

基于React Native的Material Design风格的组件库 MRN

基于React Native的Material Design风格的组件库.(为了平台统一体验,目前只打算支持安卓) 官方网站 http://mrn.js.org/ Github https://github.com/binggg/mrn 示例应用在线演示 https://appetize.io/app/j48zj9r83cetpd1mhg4g8buc4w 示例应用下载 https://github.com/binggg/MaterialReactNative/blob/master/androi

react基础总结篇1,定义组件实现父子组件传值

前端时间学习了vue,这几天开始入手react了. react项目搭建起来之后,我们一定会定义很多个组件.同样的也会涉及到父子组件的传值.今天来整理一下这个知识. 1,定义子组件步骤 1,引入react. import React,{Component} from 'react'; import './style.less'; 2,写组件并export default导出去用到了es6中的calss语法,提前说一下,this.props.content用来接收父组件中content的值,this

react初探(二)之父子组件通信、封装公共组件

一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么这一块的代码会看着非常恶心.如果这个时候我们将这个页面的表格以及弹框这些单独的模块分别写成组件的形式,然后再在这个页面中将这些组件引入进来,那样我们的代码会看着非常整洁.这样做会需要使用到父子组件之间的通信,下面会详细解释. 场景二:日常项目中我们会经常遇到某一个功能会在不同地方使用,但是每次使用的