react-navigation的使用,实现app底部导航栏

官方文档https://reactnavigation.org/docs/tab-based-navigation/

react-native社区主推的导航组件是react-navigation,示例在android环境,涉及的依赖版本如下:

"dependencies": {
    "@react-navigation/bottom-tabs": "^6.3.2",
    "@react-navigation/native": "^6.0.11",
    "react": "17.0.2",
    "react-native": "0.66.4",
    "react-native-safe-area-context": "^4.3.1",
    "react-native-screens": "^3.15.0",
    "react-native-vector-icons": "^9.2.0"
  },

安装: 

1、在项目中安装所需的包

yarn add @react-navigation/native

yarn add react-native-screens react-native-safe-area-context

底部导航栏对应的包

yarn add @react-navigation/bottom-tabs 

配置: 

2、Android 需要进行如下配置

配置文件 android/app/src/main/java/<your package name>/MainActivity.java

 在顶部引入 :

import android.os.Bundle;

在类主体中添加: 

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(null);
}

3、将整个应用程序包在 NavigationContainer 下

app/App.js

import React, { Component } from 'react'
import { NavigationContainer } from '@react-navigation/native'
import Nav from './nav/Nav'

export default class App extends Component {
  render() {
    const {isShowLauncher} = this.state
    return (
      <NavigationContainer>
        <Nav></Nav>
      </NavigationContainer>
    )
  }
}


使用: 

4、封装一个导航组件

app/nav/Nav.js

import * as React from 'react'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'

import Food from '../food/Food'
import Movie from '../movie/Movie'
import Hotel from '../hotel/Hotel'
import Bank from '../bank/Bank'

const Tab = createBottomTabNavigator()

export default function Nav() {
  return (
    <Tab.Navigator screenOptions={{tabBarActiveTintColor: '#e91e63'}}>
      <Tab.Screen name="food" component={Food} 
        options={{
          title: '美食'
        }}
      />
      <Tab.Screen name="movie" component={Movie} 
        options={{
          title: '电影'
        }}
      />
      <Tab.Screen name="hotel" component={Hotel} 
        options={{
          title: '酒店'
        }}
      />
      <Tab.Screen name="bank" component={Bank} 
        options={{
          title: '酒店'
        }}
      />
    </Tab.Navigator>
  )
}

5、初步效果

 

6、icon图标的引入(使用react-native-vector-icons)

yarn add react-native-vector-icons

在文件 android/app/build.gradle 中添加如下代码:

apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"

 修改app/nav/Nav.js,options添加tabBarIcon属性,它接收一个函数返回react node

import * as React from 'react'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'
import FontAwesome from 'react-native-vector-icons/FontAwesome'

import Food from '../food/Food'
import Movie from '../movie/Movie'
import Hotel from '../hotel/Hotel'
import Bank from '../bank/Bank'

const Tab = createBottomTabNavigator()

export default function Nav() {
  return (
    <Tab.Navigator screenOptions={{tabBarActiveTintColor: '#e91e63'}}>
      <Tab.Screen name="food" component={Food} 
        options={{
          title: '美食', 
          tabBarIcon: ({ color, size }) => (
            <MaterialCommunityIcons name="food-outline" color={color} size={size} />
          )
        }}
      />
      <Tab.Screen name="movie" component={Movie} 
        options={{
          title: '电影', 
          tabBarIcon: ({ color, size }) => (
            <MaterialCommunityIcons name="movie-roll" color={color} size={size} />
          )
        }}
      />
      <Tab.Screen name="hotel" component={Hotel} 
        options={{
          title: '酒店', 
          tabBarIcon: ({ color, size }) => (
            <FontAwesome name="hotel" color={color} size={size} />
          )
        }}
      />
      <Tab.Screen name="bank" component={Bank} 
        options={{
          title: '银行',
          tabBarIcon: ({ color, size }) => (
            <MaterialCommunityIcons name="bank" color={color} size={size} />
          )
        }}
      />
    </Tab.Navigator>
  )
}

效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值