在自定义抽屉上设置activeTintColor

时间:2017-10-19 12:46:13

标签: reactjs react-native react-navigation

我正在使用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;

如何为所选菜单项设置不同的颜色?

1 个答案:

答案 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 : {} )]}
      />
    )
  }
}