【问题标题】:Opening SideMenu on button press按下按钮时打开 SideMenu
【发布时间】:2018-06-30 18:08:36
【问题描述】:

我目前正在尝试从 V1 升级到 react-native-navigation V2,但在试图找到一种在顶部栏按钮按下时切换侧面菜单的方法时遇到了困难。

我的应用以

开头
Navigation.setRoot({
        root: {
          sideMenu: {
            left: {
              component: {
                name: 'testApp.SideDrawer',
                passProps: {
                  text: 'This is a left side menu screen'
                }
              }
            },
            center: {
              bottomTabs: {
                ...
              }
            },
          },
        },

      });

有没有办法在当前版本中做到这一点?

【问题讨论】:

    标签: react-native-navigation react-native-navigation-v2


    【解决方案1】:

    原来你不能在 V2 中使用 this.props.navigator.toggleDrawer 并且应该使用 Navigator.mergeOptions 来改变抽屉的可见性。 就我而言:

    1) 首先给抽屉分配一个Id(id:leftSideDrawer)

    Navigation.setRoot({
                root: {
                  sideMenu: {
                    left: {
                      component: {
                        name: 'testApp.SideDrawer',
                        id: 'leftSideDrawer'
                      }
                    },
                    center: {
                      bottomTabs: {
                        ...
                      }
                    },
                  },
                },
              });
    

    2) 用它来改变抽屉的可见性

    Navigation.mergeOptions('leftSideDrawer', {
          sideMenu: {
            left: {
              visible: true
            }
          }
    });
    

    【讨论】:

    • 如何关闭它?如何检查它是否已经可见并使其不可见?
    • @Zorox 你试过把可见的改回假吗?在我的应用程序中,我通过向左滑动来关闭侧抽屉。
    • @Zorox 我也在为同样的事情苦苦挣扎。 Burger-button 应该首先打开它,然后在第二次单击时再次关闭它。希望得到某种我们可以从中读取的状态......你找到了一个好的解决方案吗?
    【解决方案2】:

    您可以在组件中设置一个布尔值来识别侧抽屉屏幕的当前状态,然后您可以使用该布尔值通过 mergeOptions 设置抽屉的可见性。基本上是切换!下面是实现这一点的 sn-p。

    constructor(props) {
       super(props);
       this.isSideDrawerVisible = false; 
       Navigation.events().bindComponent(this);
    }
    
    navigationButtonPressed({ buttonId }) {
       if (buttonId === "openSideDrawer") {
       (!this.isSideDrawerVisible) ? this.isSideDrawerVisible = true : this.isSideDrawerVisible = false
       Navigation.mergeOptions(this.props.componentId, {
        sideMenu: {
          left: {
            visible: this.isSideDrawerVisible,
          }
        }
      });
     }
    }
    

    【讨论】:

    • IT 只在点击切换按钮时工作,但在它之外不起作用。
    • 详细说明@HarleenKaurArora 的回应。除了干燥之外,在组件中保持 sideMenu 状态的一个小问题是,如果 sideMenu 被组件中任何显式侦听之外的事件打开或关闭,则本地状态与显示的状态不同步循环神经网络。例如;当sideMenu被拖开时,然后通过按钮(错误地)关闭它需要两次点击。而如果它是通过触摸 sideMenu 区域而关闭的,那么随后(错误地)重新打开需要两次触摸。
    猜你喜欢
    • 2021-11-22
    • 2014-01-27
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多