React-Native项目中使用TabBar

前端之家收集整理的这篇文章主要介绍了React-Native项目中使用TabBar前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

之前的文章讲述了在RN项目中如何使用NavigationBar,如何调用原生模块,以及集成下拉刷新和上拉加载更多的功能,今天介绍一个第三方插件react-native-tab-navigator,讲述我是如何使用它在RN项目中使用TabBar

项目源码在这里

  1. 安装插件

    1. npm install react-native-tab-navigator --savenpm --save
  2. 使用

    就我的demo来说:
    Demo中包含了Navigator管理的一系列视图,我尝试过使用一个Tab管理多个由Navigator管理的一系列视图
    (这跟我之前的iOS开发经验有关,在iosApplication的根视图是TabBarController,这个TabBarController管理多个由NavigationController管理的一系列ViewController

    但是这有一个问题:

    场景切换的时候可能有隐藏TabBar的需求,按照刚才说的方法,我需要set一个值来控制tabbar的heightoverflow,又由于component的生命周期函数中没有类似于iOS中-(void)viewWillAppear;方法,所以没有很好的方法把隐藏的tabbar再显示出来(如果你有解决这个问题的方法,请告诉我)。

    那么换一种思路:

    把管理一系列视图的Tab交由一个Navigator管理,虽然这样违背了iOS开发的普通思路,但是就目前在RN项目中,没有发现太大的问题(有一个问题是只有一级页面显示TabBar,所有二级页面全部不显示,不过就国内大多数应用设计风格来看,这个问题也不算是问题)。

  3. React-native-vector-icons
    这是一个图标库,有兴趣话可以去这里深入了解,简单使用请执行下边两条命令即可

    1. $ npm native-vector-icons --save $ rnpm link$ npm link

    使用:

    1. import Icon from 'react-native-vector-icons/Ionicons';
    2. <Icon name={ 'ios-home' }
  4. 关键部分代码

    1. //root.js
    2. import React from 'react'
    3. import {
    4. Navigator
    5. } from 'react-native';
    6. import { Provider } from 'react-redux'
    7. import configureStore from './store/store.js'
    8. import App from './containers/app.js'
    9. const store = configureStore();
    10.  
    11. class Root extends React.Component {
    12. render() {
    13. return (
    14. <Provider store={ store }>
    15. //在原来<App />的基础上添加Navigator
    16. <Navigator
    17. initialRoute={{ component: App }}
    18. configureScene={(route) => {
    19. return Navigator.SceneConfigs.FloatFromRight;
    20. }}
    21. renderScene={(route,navigator) => {
    22. let Component = route.component;
    23. return <Component {...route.params} navigator={navigator} />
    24. }} />
    25. </Provider>
    26. );
    27. }
    28. }
    29. export default Root;
    30.  
    31. //----------------------
    32. //app.js ( render(){} )
    33.  
    34. render() {
    35. const { reducer } = this.props;
    36. console.log("============",reducer.tabbarHeight);
    37. return (
    38. <TabNavigator tabBarStyle={{ backgroundColor:'white' }} style={{backgroundColor: 'white'}}>
    39. <TabNavigator.Item
    40. title="主页"
    41. selected={this.state.selectedTab === 'home'}
    42. renderIcon={() => <Icon name={ 'ios-home' } size={30} color={'gray'}/>}
    43. renderSelectedIcon={() => <Icon name={ '#4E78E7'}/>}
    44. onPress={() => this.setState({ selectedTab: 'home' })}>
    45. <ProductListContainer {...this.props} />
    46. </TabNavigator.Item>
    47. <TabNavigator.Item
    48. title="其他"
    49. selected={'other'}
    50. renderIcon={() => <Icon name={ 'ios-more' } size={'other' })}>
    51. <OtherContainer {...this.props}/>
    52. </TabNavigator.Item>
    53. </TabNavigator>
    54. );
    55. }
  5. 效果

猜你在找的React相关文章