我正在尝试使用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具有函数openDropDownMenu
和closeDropDownMenu
,它们在类内部工作(所以我可以通过按钮打开菜单)。
应用程序看起来像这样
我已将菜单定义为构造函数中名为this.dropDown
的变量,因为react-native-navigation的工作原理将其设置为headerRight
中的属性static navigationOptions
。由于我想为我的下拉列表提供回调,因此我使用headerRight
从构造函数中设置this.props.navigation.setParams({headerRight: this.dropDown})
参数。
在option1Callback()
和option1Callback()
我想再次关闭菜单但是我在这里得到一个错误,该函数未定义。所以我想知道为什么会这样,并且,也许有更好的方法来解决这个问题。是否可以获得&lt; MenuItem&gt;对象直接关闭下拉列表?