写点什么

ReactNative 进阶(二十七):createMaterialTopTabNavigator 顶部导航组件

  • 2022 年 1 月 21 日
  • 本文字数:2238 字

    阅读完需:约 7 分钟

ReactNative进阶(二十七):createMaterialTopTabNavigator 顶部导航组件

一、API 原型

createMaterialTopTabNavigator(RouteConfigs,TabNavigatorConfig)
复制代码

二、参数说明

2.1 RouteConfigs

路由名称到路由配置的一个映射。示例如下:


{  Home:{ //这是一个首页路由配置项    screen:Home,//必填项   Home是react的一个组件    path:'',//选填项深度连接或webAPP中起作用    navigationOptions:{//选填项      //配置项...    }  }  Detail:{ //这是一个详情页路由配置项    screen:Detail,//必填项   Detail是react的一个组件    path:'',//选填项深度连接或webAPP中起作用    navigationOptions:{//选填项      //配置项...    }  }}
复制代码

2.1.1 navigationOptions 配置项参数

  • titletabBarLabel中的文字;

  • swipeEnabledBoolean 是否可以滑动切换 tab 页面,如果不设置则使用TabNavigatorConfig中的swipeEnabled选项一般在TabNavigatorConfig中设置;

  • tabBarOnPress:Object 点击 tab 的回调方法该方法接收两个参数 ;(1)navigationthis.props.navigation中的值);(2)defaultHandlertab press 的默认 handler);

2.2 TabNavigatorConfig

  • initialRouteName:tab 页面打开的时候显示的 tab 页面;

  • order:由RouteConfigs的 key 组成的数组,按照该数组的顺序显示对应的 tab 页面;

  • backBehavior:在 tab 页面按手机返回键的动作。值为initialRoute的时候返回到initialRouteName页面;值为none时返回上一页面或退出程序。默认为initialRoute;

  • tabBarPosition:tab bar 的位置 top 或 bottom;默认 top;

  • swipeEnabled:Boolean 左右滑动屏幕的时候是否切换 tab,默认 true;

  • animationEnabled:切换 tab 页面的时候是否显示动画;

  • lazy:Boolean 打开 tab 页面的时候是否开启懒加载,默认false,渲染全部的 tab 页面;当为 true 的时候只有进入 tab 页面是才渲染对应的 tab 页面;

  • optimizationsEnabled:是否将 tab 页面用 <ResourceSavingScene /> 包裹。如果为 true 在 tab 页面失去焦点的时候会移除当前页面提高内存使用率;

  • initialLayout:object 包含 width 和 height 可以防止 tab view 渲染的延迟;

  • tabBarComponent:值为一个组件,用来覆盖 tab bar;

  • tabBarOptions:object,具体属性参数信息如下。

2.2.1 tabBarOptions 属性


创建示例如下:


//TopNavigatorComponent.jsimport {createAppContainer, createMaterialTopTabNavigator} from 'react-navigation'import TopPage1 from './TopPage1'import TopPage2 from './TopPage2'import TopPage3 from './TopPage3'import TopPage4 from './TopPage4'/** * 标签导航 */const TopTabNavigator = createMaterialTopTabNavigator({    topPage1: {        screen: TopPage1,    },    topPage2: {        screen: TopPage2,    },    topPage3: {        screen: TopPage3,    },    topPage4:{        screen:TopPage4,    }}, {    tabBarPosition: 'bottom',       //标签栏在屏幕顶部还是底部    // swipeEnabled:true,           //是否可以滑动切换标签    // backBehavior:'none',         //andorid按下返回键将返回initalRouteName,如果设置非initalRouteName则直接结束标签导航    lazy: false,                    //是否只渲染显示的标签    animationEnabled: true,         //标签切换是否有动画效果    tabBarOptions: {        activeTintColor: '#ffffff',  //标签栏激活字体颜色        inactiveTintColor: '#000000',//标签栏未激活字体颜色        showLabel: true,             //是否显示标签栏        labelStyle: {fontSize: 16},  //标签样式(可设置字体大小等)        showIcon: true,              //是否显示标签栏上图标        scrollEnabled: true,        //是否可以滚动标签栏目(当tab总数超过一屏)        indicatorStyle: {height: 1}, //指示器样式 height:0则不显示        style: {backgroundColor: '#31b3c0'}, //设置整个tabbar样式(背景颜色等)        // tabStyle:{backgroundColor:'#ffffff', height:50},//设置单个tabbar样式    }}); const appTopTabNavigation = createAppContainer(TopTabNavigator);export default appTopTabNavigation;
复制代码

三、拓展阅读


四、延伸阅读

4.1 需求

在子组件执行某个操作的时候,需要其调用父组件的某个函数或者改变父组件的某个参数。实现方式如下:

4.2 子组件

import PropTypes from 'prop-types';
export default class Child extends PureComponent { static propTypes = { onItemClick: PropTypes.func, } info = '子组件的内容'; itemClick(info) { // 可以将子组件中的某个内容传出给父组件 if (this.props.onItemClick) { this.props.onItemClick(info); } } render(){ return( <TouchableOpacity onPress={() => { this.itemClick(this.info); }} style={styles.touchItem} > <Text > 点击修改父组件内容 </Text> </TouchableOpacity> ); }}
复制代码

4.3 父组件

export default class Father extends PureComponent {  _onItemClick(info) {    console.log('你调用了父组件的方法')    // 显示info或者用子组件传参改变父组件中的参数    console.log(info);  } render(){    return(    // _onItemClick为父组件函数定义        <Child           onItemClick={this._onItemClick}/>    );}
复制代码


发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
ReactNative进阶(二十七):createMaterialTopTabNavigator 顶部导航组件