使用React Native和package' react-native-navigation'打开和关闭下拉菜单。

时间:2018-04-20 14:07:12

标签: reactjs react-native react-native-navigation

我正在尝试使用React Native和包react-native-navigation来实现一个下拉菜单。我在使用自定义对象< DropDownMenu>时遇到问题,我设法使用< DropDownMenu>内部的元素显示它。但是我因为我无法在外部引用而再次隐藏它时遇到了问题。这是我的代码

import React, {Component} from 'react';
import {
  View,
  Text,
} from 'react-native';
import {DropDownMenu,MenuItem} from './DropDownMenu';

export default class DropDownDemo extends Component {
  static navigationOptions = ({navigation}) => {
    const {state} = navigation;
    let paramHeaderRight =
        state.params === undefined || state.params.headerRight === undefined
        ? null : state.params.headerRight;
    return {
      title: 'App Title',
      headerStyle: {backgroundColor: '#001C63'},
      headerTitleStyle: {color: 'white'},
      headerTintColor: 'white',
      headerRight: paramHeaderRight,
    };
  };

  constructor(props) {
    super(props);
    this.state = {};
    this.option1Callback = this.option1Callback.bind(this);
    this.option2Callback = this.option2Callback.bind(this);
    this.dropDown = (
        <DropDownMenu>
          <MenuItem
              text={'option 1'}
              callbackMethod={this.option1Callback}
          />
          <MenuItem
              text={'option 2'}
              callbackMethod={this.option2Callback}
          />
        </DropDownMenu>
    );
    this.props.navigation.setParams({headerRight: this.dropDown});
  }

  option1Callback() {
    this.dropDown.closeDropDownMenu();    // <-- ERROR here
    // option1 callback code here ...
  }
  option2Callback() {
    this.dropDown.closeDropDownMenu();    // <-- ERROR  here
    // option2 callback code here ...
  }
  render() {
    return (
      <View>
        <Text>[Application goes here]</Text>
      </View>
    )
  }
}

使用StackNavigator类从App.js调用代码,就像这样

import DropDownDemo from './DropDownDemo';
const Navigation = StackNavigator({
  DropDownDemo: {screen: DropDownDemo},
});

我写了&lt; DropdownMenu&gt;和&lt; MenuItem&gt;类别分别,DropDownMenu具有函数openDropDownMenucloseDropDownMenu,它们在类内部工作(所以我可以通过按钮打开菜单)。

应用程序看起来像这样

enter image description here

我已将菜单定义为构造函数中名为this.dropDown的变量,因为react-native-navigation的工作原理将其设置为headerRight中的属性static navigationOptions。由于我想为我的下拉列表提供回调,因此我使用headerRight从构造函数中设置this.props.navigation.setParams({headerRight: this.dropDown})参数。

option1Callback()option1Callback()我想再次关闭菜单但是我在这里得到一个错误,该函数未定义。所以我想知道为什么会这样,并且,也许有更好的方法来解决这个问题。是否可以获得&lt; MenuItem&gt;对象直接关闭下拉列表?

0 个答案:

没有答案