ReactNavigation入门与自定义头部

2018-09-13  本文已影响0人  BridgeXD

1、安装

    yarn add react-navigation

2、创建主页与跳转页面

主页

class HomeScreen extends BaseComponent {
//BaseComponent:自定义基类
static  navigationOptions = ({navigation}) => {
    return {
        headerTitle: 'Home',
        headerTitleStyle: CommonStyle.headerTitleStyle,
    }
}


render() {
    return (
        <View style={{flex: 1, alignItems: 'center', justifyContent: 'center'}}>
            <Text>Home Screen</Text>
            <TouchableOpacity onPress={() => this.props.navigation.navigate('MineHome', {
                itemId: 'Reload',
                name: 'Back',
                hideBack: true
            })}>
                <Text> title="Go to Details"</Text>

            </TouchableOpacity>
        </View>
    );
}
}
 export default HomeScreen

3、启动页

  const RootStack = StackNavigator(
    {
        HomeScreen: {
            screen: HomeScreen,
        },
        MineHome: {
            screen: MineHome,
            navigationOptions: {
            headerTitle: 'Detail'
        }
    },
  },
  {
        initialRouteName: 'HomeScreen',
  }
  );
export default class App extends Component<Props> {
    render() {
       return (
            <RootStack/>
        );
    }
}

3、自定义头部控件

import React, {Component} from 'react'
import {CommonStyle} from "./CommonStyle";
import {Image, Text, TouchableOpacity} from "react-native";
import {callOnceInInterval} from "./EventUtils";

class BaseComponent extends React.Component {

static navigationOptions=({navigation})=>({
    headerStyle:({backgroundColor:'white'}),
    headerTitle:navigation.state.params.title,
    headerTitleStyle:CommonStyle.headerTitleStyle,
    headerLeft: (navigation.state.params.hideBack ? <Text style={{marginLeft: 10}}/>
            :
            <TouchableOpacixty style={{paddingLeft: 10, paddingRight: 30}}
                               onPress={() => {
                                   navigation.pop()
                               }}>
                <Image style={{width: 32, height: 32}}
                       source={require('../assets/icon_back.png')}/>
            </TouchableOpacixty>
    ),
    headerRight: (navigation.state.params.rightTitle !== null ?
        (<TouchableOpacity
            onPress={() => callOnceInInterval(() => navigation.state.params.navigatePress!== undefined?
                navigation.state.params.navigatePress():null)
            }>
            <Text style={CommonStyle.headerRight}>{navigation.state.params.rightTitle}</Text>
        </TouchableOpacity>) :
        ((<Text style={{marginRight: 10}}/>))),
})

render() {
    return null
}
}

export default BaseComponent

设置params(修改headerTitle)

this.props.navigation.setParams({
  createTitle: this.createHeaderParentTitle
})

createHeaderParentTitle = () => (
  <View style={{ flexDirection: "row", flex: 1, justifyContent: "center" }}>
   <Text style={[commonStyles.headerTitleStyle, { alignSelf: "center" }]}>体适能</Text>
  </View>
)
上一篇 下一篇

猜你喜欢

热点阅读