javascript - 突出显示react-native-side-menu中查看的组件上的菜单项

标签 javascript android ios mobile react-native

我正在使用react-native-side-menu通过引用此answer来查看不同的组件。每个菜单项按下时都会显示相应的组件。 一切工作正常,除了我不知道打开菜单时如何突出显示当前显示组件上的菜单项。

假设我正在将菜单项的背景颜色更改为突出显示,如何根据查看的组件切换样式?

菜单项组件:

module.exports = class Menu extends Component {
    static propTypes = {
        onItemSelected: React.PropTypes.func.isRequired,
    };

    render() {
    return (
      <ScrollView  style={styles.menu}>
       //the route is the menu items with component
       {
        routes.map((com) => {
            return(
            <Text key={com.id}
              onPress={() => this.props.onItemSelected(com)}
              style={styles.item}>
              {com.name}
            </Text>
            )
        })
      }
      </ScrollView>
    );
  }
}

侧边菜单组件:

module.exports = class Main extends Component {
  constructor(props) {
    super(props);
    this.state = {
        isOpen: false,
        selectedItem: routes[0],
      };
  }

  toggle() {
    this.setState({
      isOpen: !this.state.isOpen,
    });
  }

  updateMenuState(isOpen) {
    this.setState({ isOpen, });
  }

  onMenuItemSelected = (item) => {
    this.setState({
      isOpen: false,
      selectedItem: item,
    });
  }

  render() {
    const menu = <Menu onItemSelected={this.onMenuItemSelected} />;
    let Component = this.state.selectedItem.compo  ;
    return (
      <SideMenu
        menu={menu}
        isOpen={this.state.isOpen}
        onChange={(isOpen) => this.updateMenuState(isOpen)}
        openMenuOffset={SCREEN_WIDTH * 0.4}
        >

        {Component}

        <Button style={styles.button} onPress={() => this.toggle()}>
          <Image
            source={require('./assets/menu.png')} style={{width: 35, height: 35}} />
        </Button>
      </SideMenu>
    );
  }
}

最佳答案

在 style 属性上使用 [] 允许定义样式数组:所以基本上主要思想是根据状态添加样式。假设选择一个项目时,我应该将其背景颜色设置为红色,否则设置为白色。

因此,首先,我们应该跟踪当前选定的项目,其次动态定义背景颜色,最后在单击项目时用所选项目更新当前选定的项目。

module.exports = class Menu extends Component {
  constructor( props ) {
    super( props );
    this.state = {
      //Add a state to track what current selected Item
      selectedItem: routes[ 0 ].id
    };
  }

  static propTypes = {
    onItemSelected: React.PropTypes.func.isRequired,
  };

  render() {
    return (
    <ScrollView style={ styles.menu }>
      //the route is the menu items with component
      { routes.map( (com) => {
          return ( < Text
                          key={ com.id }
                          onPress={ () => {
                                      this.props.onItemSelected( com )
                                      //Change the current selected Item
                                      this.setState( {
                                        selectedItem: com.id
                                      } )
                                    } }
                          style={ [ styles.item, 
                                    { 
                                      backgroundColor: this.state.selectedItem == com.id ? 
                                      'red' : 'white' 
                                    } 
                                  ] }>
                     { com.name }
                     </Text>
          )
        } ) }
    </ScrollView>
    );
  }
}

关于javascript - 突出显示react-native-side-menu中查看的组件上的菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299974/

相关文章:

Android DisplayMetrics 显示绝对大小随方向变化

javascript - 使用 mongodb 嵌入 Json 数据

javascript - jQuery 切换图像不切换

android - 如图所示,如何创建带有后退箭头的 android Activity

java - 使用自定义对象数组列表实例化 fragment 第二部分

ios - 在 Swift 中更改 ViewController 类名称的正确方法是什么?

Wordpress CMS 中的 iPhone 中间件/客户区?

objective-c - 如何: Implement server forcing disconnect of client in GKSession

javascript - es6模块中导出对象的正确方法

java - 在前端显示预下载处理