• react-native react-navigation的用法


     react-navigation升级了, 看这个:

    react-navigation 3.x版本的使用

    一、问题背景

    react-navigation是react-native官方推荐的,基于Javascript的可扩展且使用简单的导航,功能强大且完备

     

    回顾一下,react-navigation包含以下功能来帮助我们创建导航器:

    • StackNavigator - 一次只渲染一个页面,并提供页面之间跳转的方法。 当打开一个新的页面时,它被放置在堆栈的顶部
    • TabNavigator - 渲染一个Tab选项卡,让用户可以在几个Tab页面之间切换
    • DrawerNavigator - 提供一个从屏幕左侧滑入的抽屉,类似bilibili和QQ的隐藏在左侧的内容栏功能
    详细请看: react native 导航路由组件react-navigation的使用
    通过这些博客教程,我们可以了解react-navigation的主要功能,如上述的三个功能块,这对于一些练手用的小APP来说,已经够了,
     
     
    但是,对于稍微有点需求的应用来说,这点功能就不够用了,
    问题一: 如何重置堆栈?
        比如,登陆成功后,点击返回,总不能让页面返回登录页吧!
     
    问题二: 如何有选择的清除堆栈?
        比如,编辑内容发布成功后,跳转的已发布的内容页,这时候再点返回,你总不能返回刚刚的编辑页吧!
     
    问题三:如何在多个StackNavigator之间,或StackNavigator父子间进行导航?
        有时候,我们需要的导航栈不止一个,那么他们之间如何进行页面跳转?
     
     
     二、分析
    我们来看看react-navigation的基本使用:

    (1)通过navigate函数实现界面之间跳转:

    this.props.navigation.navigate('Mine');

    参数为我们在StackNavigator注册界面组件时的名称。

    同样也可以从当前页面返回到上一页:

    // 返回上一页
    this.props.navigation.goBack();

    这是手动返回上一页,也可通过每个页面自带的返回图标返回

     

    (2)跳转时传值:

    this.props.navigation.navigate('Mine',{info: 'value'});

    第一个参数同样为要跳转的界面组件名称,第二个参数为要传递的参数,info可以理解为key,后面即传递的参数(value值)。

    同样,我们也可以在跳转后的页面去获取携带过来的值:

    this.props.navigation.state.params.info}

    通过state.params来获取传来的参数,后面为key值。此处为info。

     
    (3)react-navigation自带标题栏的使用:
    //会覆盖StackNavigator声明的页面的navigationOptions 
    static  navigationOptions = ({navigation}) => ({
        headerTintColor: '#fff',
        headerStyle: {height: 65, backgroundColor: '#fb7299'},
        headerTitle: navigation.state.params.title, //这是从上一级跳转携带的
        headerTitleStyle: {
            fontSize: 18,
            color: '#fff',
            alignSelf: 'center',    //包括下面的属性主要是为了标题居中显示
            flex: 1,
            textAlign: 'center'
        },
        headerRight: <View>
                  <TouchableOpacity onPress={() => {navigation.state.params.toOperate();}}>    //此处必须通过添加参数的形式来调用方法
                      <View><Text style={{color: '#fff', marginRight: 20}}>下一步</Text></View>
                  </TouchableOpacity >
              </View>
    })
    
    1. navigation.state.params.title表示通过参数的形式来显示标题
    2. 想要标题居中,alignSelf: 'center', flex: 1, textAlign: 'center'
    3. navigation.state.params.toOperate();通过这种传参的方式,在标题栏中调用方法

    该方法需要在componentDidMount()等方法中设置传递
    componentDidMount() {
        this.props.navigation.setParams({toOperate: () => {
            alert('操作')
        }})
    }
    三、结语
    先这样咯!
     
     
     
  • 相关阅读:
    Oracle删除约束和主键的语句
    Tomcat启动时SecureRandom超级慢的问题
    MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
    ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01653: 表 SYS.AUD$ 无法通过 8192 (在表空间 SYSTEM 中) 扩展
    Linux 使用pwgen命令创建随机密码
    nginx 之 proxy_pass详解
    给nginx生成自签名证书
    常见排序算法(java实现)
    浅析变量的作用域和生存周期的差别
    filter过滤器
  • 原文地址:https://www.cnblogs.com/nangezi/p/9988360.html
Copyright © 2020-2023  润新知