大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
期待已久的新教程上线啦!解锁React Native开发新姿势,一网打尽React Native最新与最热技术,点我Get!!!
createBottomTabNavigator
相当于iOS里面的TabBarController,屏幕下方的标签栏。如图:
createBottomTabNavigator(RouteConfigs, BottomTabNavigatorConfig):
RouteConfigs
(必选):路由配置对象是从路由名称到路由配置的映射,告诉导航器该路由呈现什么。BottomTabNavigatorConfig
(可选):配置导航器的路由(如:默认首屏,navigationOptions,paths等)样式(如,转场模式mode、头部模式等)。从createBottomTabNavigator API上可以看出createBottomTabNavigator
支持通过RouteConfigs
和 BottomTabNavigatorConfig
两个参数来创建createBottomTabNavigator导航器。
RouteConfigs支持三个参数screen
、path
以及navigationOptions
;
screen
(必选):指定一个 React 组件作为屏幕的主要显示内容,当这个组件被TabNavigator加载时,它会被分配一个navigation
prop。path
(可选):用来设置支持schema跳转时使用,具体使用会在下文的有关Schema
章节中讲到;navigationOptions
(可选):用以配置全局的屏幕导航选项如:title、headerRight、headerLeft等;提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
TabBarBottom
,在Android平台上默认使用TabBarTop
。
TabBarBottom
与TabBarTop
都是react-navigation
所支持的组件,要自定义TabBar可以重写这两个组件也可以根据需要自己实现一个;eg:
tabBarOptions: {
labelStyle: {
fontSize: 12,
},
tabStyle: {
width: 100,
},
style: {
backgroundColor: 'blue',
},
}
提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
createBottomTabNavigator支持的屏幕导航选项的参数有:
提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
export const AppTabNavigator = createBottomTabNavigator({
Page1: {
screen: Page1,
navigationOptions: {
tabBarLabel: 'Page1',
tabBarIcon: ({tintColor, focused}) => (
<Ionicons
name={focused ? 'ios-home' : 'ios-home-outline'}
size={26}
style={{color: tintColor}}
/>
),
}
},
Page2: {
screen: Page2,
navigationOptions: {
tabBarLabel: 'Page2',
tabBarIcon: ({tintColor, focused}) => (
<Ionicons
name={focused ? 'ios-people' : 'ios-people-outline'}
size={26}
style={{color: tintColor}}
/>
),
}
},
Page3: {
screen: Page3,
navigationOptions: {
tabBarLabel: 'Page3',
tabBarIcon: ({tintColor, focused}) => (
<Ionicons
name={focused ? 'ios-chatboxes' : 'ios-chatboxes-outline'}
size={26}
style={{color: tintColor}}
/>
),
}
},
}, {
tabBarComponent: TabBarComponent,
tabBarOptions: {
activeTintColor: Platform.OS === 'ios' ? '#e91e63' : '#fff',
}
});
提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
TabNavigator的navigationOptions有两个关键的属性,tabBarLabel标签与tabBarIcon图标:
Page2: {
screen: Page2,
navigationOptions: {
tabBarLabel: 'Page2',
tabBarIcon: ({tintColor, focused}) => (
<Ionicons
name={focused ? 'ios-people' : 'ios-people-outline'}
size={26}
style={{color: tintColor}}
/>
),
}
},
在上述代码中使用了react-native-vector-icons
的矢量图标作为Tab的显示图标,tabBarIcon接收一个React 组件,大家可以根据需要进行定制:
提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
const {navigation} = this.props;
...
<Button
title="跳转到页面2"
onPress={() => {
navigation.navigate("Page3",{ name: 'Devio' })
}}
/>
<Button
title="Go Back"
onPress={() => {
navigation.goBack();
}}
/>
代码解析:
页面跳转可分为两步:
const {navigation} = this.props;
navigate(routeName, params, action)
进行页面跳转: navigation.navigate('Page2');
navigation.navigate('Page3',{ name: 'Devio' });
这里在跳转到Page3
的时候传递了参数{ name: 'Devio' }
;
提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
export default class Page1 extends React.Component {
//也可在这里定义每个页面的导航属性,这里的定义会覆盖掉别处的定义
// static navigationOptions = {
// title: 'Page1',
// };
render() {
const {navigation} = this.props;
return <View style={{flex: 1, backgroundColor: "gray",}}> <Text style={styles.text}>欢迎来到Page1</Text> <Button title="Go Back" onPress={() => { navigation.goBack(); }} /> <Button title="改变主题色" onPress={() => { navigation.setParams({theme:{ tintColor:'orange', updateTime:new Date().getTime() }}) }} /> <Button title="跳转到页面2" onPress={() => { navigation.navigate("Page2") }} /> </View>
}
}
代码解析:
在上述代码中通过:
<Button
title="改变主题色"
onPress={() => {
navigation.setParams({theme:{
tintColor:'orange',
updateTime:new Date().getTime()
}})
}}
/>
更新当前主题,你会看到当点击“改变主题色“按钮时,TabBar的颜色也会跟着改变。
当用户单击Go Back
按钮时,通过:
navigation.goBack();
实现了返回到默认的Tab。
提示:和本文配套的还有一个React Navigation3x的视频教程,欢迎学习。
在使用react-navigation时往往有些需求通过简单的配置是无法完成的,比如:
类似上述的应用场景有很多,大家可以通过与本教程配套的最新版React Native+Redux打造高质量上线App视频教程进行进一步学习react-navigation的更多高级应用。