react-native
पृष्ठों से इंजेक्ट किए गए बटन के साथ नेविगेटर
खोज…
परिचय
इसके बजाय अपने मुख्य जेएस फ़ाइल है कि बटन के साथ अपने नाविक शामिल हैं। यह किसी भी पृष्ठ पर ऑन-डिमांड बटन को इंजेक्ट करने के लिए क्लीनर है जो आपको चाहिए।
//In the page "Home", I want to have the right nav button to show
//a settings modal that resides in "Home" component.
componentWillMount() {
this.props.route.navbarTitle = "Home";
this.props.route.rightNavButton = {
text: "Settings",
onPress: this._ShowSettingsModal.bind(this)
};
}
पूर्ण टिप्पणी उदाहरण
'use strict'; import React, {Component} from 'react'; import ReactNative from 'react-native'; const { AppRegistry, StyleSheet, Text, View, Navigator, Alert, TouchableHighlight } = ReactNative; //This is the app container that contains the navigator stuff class AppContainer extends Component { renderScene(route, navigator) { switch(route.name) { case "Home": //You must pass route as a prop for this trick to work properly return <Home route={route} navigator={navigator} {...route.passProps} /> default: return ( <Text route={route} style={styles.container}> Your route name is probably incorrect {JSON.stringify(route)} </Text> ); } } render() { return ( <Navigator navigationBar={ <Navigator.NavigationBar style={ styles.navbar } routeMapper={ NavigationBarRouteMapper } /> } initialRoute={{ name: 'Home' }} renderScene={ this.renderScene } /> ); } } //Nothing fancy here, except for checking for injected buttons. //Notice how we are checking if there are injected buttons inside the route object. //Also, we are showing a "Back" button when the page is not at index-0 (e.g. not home) var NavigationBarRouteMapper = { LeftButton(route, navigator, index, navState) { if(route.leftNavButton) { return ( <TouchableHighlight style={styles.leftNavButton} underlayColor="transparent" onPress={route.leftNavButton.onPress}> <Text style={styles.navbarButtonText}>{route.leftNavButton.text}</Text> </TouchableHighlight> ); } else if(route.enableBackButton) { return ( <TouchableHighlight style={styles.leftNavButton} underlayColor="transparent" onPress={() => navigator.pop() }> <Text style={styles.navbarButtonText}>Back</Text> </TouchableHighlight> ); } }, RightButton(route, navigator, index, navState) { if(route.rightNavButton) { return ( <TouchableHighlight style={styles.rightNavButton} underlayColor="transparent" onPress={route.rightNavButton.onPress}> <Text style={styles.navbarButtonText}>{route.rightNavButton.text}</Text> </TouchableHighlight> ); } }, Title(route, navigator, index, navState) { //You can inject the title aswell. If you don't we'll use the route name. return (<Text style={styles.navbarTitle}>{route.navbarTitle || route.name}</Text>); } }; //This is considered a sub-page that navigator is showing class Home extends Component { //This trick depends on that componentWillMount fires before the navbar is created componentWillMount() { this.props.route.navbarTitle = "Home"; this.props.route.rightNavButton = { text: "Button", onPress: this._doSomething.bind(this) }; } //This method will be invoked by pressing the injected button. _doSomething() { Alert.alert( 'Awesome, eh?', null, [ {text: 'Indeed'}, ] ) } render() { return ( <View style={styles.container}> <Text>You are home</Text> </View> ); } } var styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', marginTop: 66 }, navbar: { backgroundColor: '#ffffff', }, navbarTitle: { marginVertical: 10, fontSize: 17 }, leftNavButton: { marginVertical: 10, paddingLeft: 8, }, rightNavButton: { marginVertical: 10, paddingRight: 8, }, navbarButtonText: { fontSize: 17, color: "#007AFF" } }); AppRegistry.registerComponent('AppContainer', () => AppContainer);
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow