StackNavigator
导航栏
API: StackNavigator(RouteConfigs,StackNavigatorConfig)
// 注册导航 const Navs = StackNavigator({ Home: { screen: Tabs },HomeTwo: { screen: HomeTwo,// 必须,其他都是非必须 path:'app/homeTwo',使用url导航时用到,如 web app 和 Deep Linking navigationOptions: {} // 此处设置了,会覆盖组件内的`static navigationOptions`设置. 具体参数详见下文 },HomeThree: { screen: HomeThree },HomeFour: { screen: HomeFour } },{ initialRouteName: 'Home',// 默认显示界面 navigationOptions: { // 屏幕导航的默认选项,也可以在组件内用 static navigationOptions 设置(会覆盖此处的设置) header: { // 导航栏相关设置项 backTitle: '返回',// 左上角返回键文字 style: { backgroundColor: '#fff' },titleStyle: { color: 'green' } },cardStack: { gesturesEnabled: true } },mode: 'card',// 页面切换模式,左右是card(相当于iOS中的push效果),上下是modal(相当于iOS中的modal效果) //让安卓实现push动画 headerMode: 'screen',transitionConfig:()=>({ screenInterpolator:CardStackStyleInterpolator.forHorizontal,}) onTransitionStart: ()=>{ console.log('导航栏切换开始'); },// 回调 onTransitionEnd: ()=>{ console.log('导航栏切换结束'); } // 回调 });
//页面跳转传参 navigate('Detail',{ title:'图片详情',url:item.url,// 跳转的时候携带一个参数去下个页面 callback: (data)=>{ console.log(data); // 打印值为:'回调参数' } }); const {navigate,goBack,state} = this.props.navigation; // 在第二个页面,在goBack之前,将上个页面的方法取到,并回传参数,这样回传的参数会重走render方法 state.params.callback('回调参数'); goBack(); //通过static navaigationOptions来初始化页面 //属性给params componentDidMount(){ this.props.navigation.setParams({ title:'自定义Header',navigatePress:this.navigatePress }) } navigatePress = () => { alert('点击headerRight'); console.log(this.props.navigation); } //接下来就可以通过params方法来获取点击事件了 static navigationOptions = ({ navigation,screenProps }) => ({ title: navigation.state.params.title,headerRight:( <Text onPress={navigation.state.params.navigatePress}> 返回 </Text> ) });
demo1:
import React from 'react'; import { AppRegistry,Text,Button,View,} from 'react-native'; import { StackNavigator } from 'react-navigation'; class HomeScreen extends React.Component { static navigationOptions = { title: 'Welcome',}; render() { const { navigate } = this.props.navigation; return ( <View> <Button onPress={() => navigate('Chat',{user: 'xh'})} title="Chat with xh" /> </View> ); } } class ChatScreen extends React.Component { static navigationOptions = ({ navigation }) => ({ title: `Chat with ${navigation.state.params.user}`,}); render() { const { params } = this.props.navigation.state; return ( <View> <Text>Chat with {params.user}</Text> </View> ); } } const ReactNavigation = StackNavigator({ Home: { screen: HomeScreen },Chat: { screen: ChatScreen },});
TabNavigator
标签栏
const MyTab = TabNavigator({ Home: { screen: Home,navigationOptions:{ tabBarLabel: '首页',tabBarIcon: ({tintColor}) => ( <Image source={{uri : ''}} style={[tabBarIcon,{tintColor: tintColor}]} /> ),},{ tabBarPosition: 'bottom',swipeEnabled:false,animationEnabled:false,tabBarOptions: { style: { height:49 },activeBackgroundColor:'white',activeTintColor:'#4ECBFC',inactiveBackgroundColor:'white',inactiveTintColor:'#aaa',showLabel:false,} });
demo2:
import React from 'react'; import { AppRegistry,} from 'react-native'; import { StackNavigator } from 'react-navigation'; import { TabNavigator } from 'react-navigation'; class ChatScreen extends React.Component { static navigationOptions = ({ navigation }) => ({ title: `Chat with ${navigation.state.params.user}`,}); render() { const { params } = this.props.navigation.state; return ( <View> <Text>Chat with {params.user}</Text> </View> ); } } class Home1Screen extends React.Component { render() { const { navigate } = this.props.navigation; return ( <View> <Button onPress={() => navigate('Chat',{user: 'user1'})} title="Chat with user1" /> </View> ); } } class Home2Screen extends React.Component { render() { const { navigate } = this.props.navigation; return ( <View> <Button onPress={() => navigate('Chat',{user: 'user2'})} title="Chat with user2" /> </View> ); } } const ScreenNavigator = TabNavigator({ Home1: { screen: Home1Screen },Home2: { screen: Home2Screen },}); ScreenNavigator.navigationOptions = { title: 'index title',}; const ReactNavigation = StackNavigator({ Home: { screen: ScreenNavigator },}); //增加一个右边按钮 static navigationOptions = ({ navigation }) => { const {state,setParams} = navigation; const isInfo = state.params.mode === 'info'; const {user} = state.params; return { title: isInfo ? `${user}'s Contact Info` : `Chat with ${state.params.user}`,headerRight: ( <Button title={isInfo ? 'Done' : `${user}'s info`} onPress={() => setParams({ mode: isInfo ? 'none' : 'info'})} /> ),}; };原文链接:https://www.f2er.com/react/303884.html