如何关闭反应本机弹出菜单?

How to close react native popup menu?

我正在使用您的 react-native-popup-menu 作为注销按钮。 当单击按钮时,身份验证被删除,屏幕将转到登录。 但是菜单还在。

如何在屏幕切换时关闭此菜单?

<Menu>
  <MenuTrigger>
    <Icon
      name='more-vert'
      color='#fff'
    />
  </MenuTrigger>
  <MenuOptions>
    <MenuOption value={1}>
      <Text onPress={() => {
        this.props.onLogout()
      }}>logout</Text>
    </MenuOption>
  </MenuOptions>
</Menu>

最初由 bexoss 在 react-native-popup-menu 上询问 GitHub。

如他们的文档中所述,您应该在 Menu 组件中使用 visible 属性。 您需要像这样调整您的代码:

<Menu opened={this.state.opened}>
  <MenuTrigger onPress={() => this.setState({ opened: true })}>
    <Icon
      name='more-vert'
      color='#fff'
    />
  </MenuTrigger>
  <MenuOptions>
    <MenuOption value={1}>
      <Text onPress={() => {
        this.props.onLogout()
        this.setState({ opened: false })
      }}>logout</Text>
    </MenuOption>
  </MenuOptions>
</Menu>

而且我认为您需要像这样定义组件的默认状态:

 constructor(props) {
   super(props)
   this.state = { opened: false }
 }

您还可以找到完整示例here

https://github.com/instea/react-native-popup-menu/blob/master/doc/api.md

上面的 API 文档指出有一个 close() 方法。

所以你需要做的只是声明 ref 属性来直接访问你的 Menu 组件。例如 "menuRef":

<Menu uref='menuRef'>
  <MenuTrigger>
    <Icon
      name='more-vert'
      color='#fff'
    />
  </MenuTrigger>
  <MenuOptions>
    <MenuOption value={1}>
      <Text onPress={() => {
        this.props.onLogout()
      }}>logout</Text>
    </MenuOption>
  </MenuOptions>
</Menu>

然后您可以从当前组件中的任何地方简单地调用:this.refs.menuRef.close();

这种方法也会使结束动画。

这里的所有其他答案都有效。这是另一个(更简单的)问题解决方案,具体取决于您的要求。

您正在处理文本组件中的注销事件,因此不会触发关闭菜单的处理程序。尝试将其传递给 MenuOption:

onSelect 属性
<MenuOption onSelect={() => this.props.onLogout()}>
  <Text>logout</Text>
</MenuOption>

注意:如果您从处理程序返回 false,菜单将不会关闭。