我正在使用DrawerNavigator创建抽屉。我通过设置activeTintColor值
突出显示抽屉上当前选定的屏幕contentOptions: {
activeTintColor: '#65433d',
}
现在我决定通过设置contentComponent来自定义抽屉。所以看起来像我的代码
export default DrawerNavigator({
Page1: {
screen: Page1
},
Page2: {
screen: Page2
},
Page3: {
screen: Page3
}
}, {
contentComponent: SideMenu,
drawerWidth: 300
});
在SlideMenu.js中
/**
* Sample React Native App
* https://github.com/facebook/react-native
* @flow
*/
import PropTypes from 'prop-types';
import React, {Component} from 'react';
import styles from './SideMenu.style';
import {NavigationActions} from 'react-navigation';
import {ScrollView, Text, View} from 'react-native';
class SideMenu extends Component {
navigateToScreen = (route) => () => {
const navigateAction = NavigationActions.navigate({
routeName: route
});
this.props.navigation.dispatch(navigateAction);
}
render () {
return (
<View style={styles.container}>
<ScrollView>
<View>
<Text style={styles.sectionHeadingStyle}>
Section 1
</Text>
<View style={styles.navSectionStyle}>
<Text style={styles.navItemStyle} onPress={this.navigateToScreen('Page1')}>
Page1
</Text>
</View>
</View>
<View>
<Text style={styles.sectionHeadingStyle}>
Section 2
</Text>
<View style={styles.navSectionStyle}>
<Text style={styles.navItemStyle} onPress={this.navigateToScreen('Page2')}>
Page2
</Text>
<Text style={styles.navItemStyle} onPress={this.navigateToScreen('Page3')}>
Page3
</Text>
</View>
</View>
</ScrollView>
<View style={styles.footerContainer}>
<Text>This is my fixed footer</Text>
</View>
</View>
);
}
}
SideMenu.propTypes = {
navigation: PropTypes.object
};
export default SideMenu;
如何为所选菜单项设置不同的颜色?
答案 0 :(得分:1)
有两种识别当前屏幕的方法。 navigation
道具有包含routeName
的子道具。您可以相应地检查和呈现SideMenu
组件。
Firs选项是通过DrawerNavigator
示例强>
export default DrawerNavigator({
Page1: { screen: Page1 },
Page2: { screen: Page2 },
Page3: { screen: Page3 }
}, {
contentComponent: (props) => (
<SideMenu currentScreen={props.navigation.state.routeName} {...props} />
),
drawerWidth: 300
});
第二种方法是直接在组件内部读取它。
示例强>
class SideMenu extends Component {
constructor(props) {
super(props);
this.state = { currentScreen: props.navigation.state.routeName };
}
render() {
return(
<SomeView
style={[styles.view, (this.state.currentScreen === 'Page1' ? styles.active : {} )]}
/>
)
}
}