Панель навигации открывается после возвращения с другого экрана - PullRequest
0 голосов
/ 01 февраля 2019

Я использую Wix's реагировать на родную навигацию V2.В моем навигационном ящике есть одно имя компонента, после нажатия которого я перехожу к следующему экрану, и после нажатия кнопки назад я возвращаюсь, но ящик открывается.

Ниже приведен код моего главного экрана, который имеетправая кнопка, чтобы открыть ящик навигации.

export default class Boiler extends Component {

    constructor(props) {
        super(props);
        this.isSideDrawerVisible = false;
        Navigation.events().bindComponent(this);
    }

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

    render() {
        return (
            <View style={styles.container}>
                <Text>Hello</Text>
            </View>
        );
    }
}

Ниже приведен код setRoot моего главного экрана

Navigation.setRoot({
        root: {
            sideMenu: {
                left: {
                    component: {
                        name: 'SideDrawer',
                        passProps: {
                            text: 'This is a left side menu screen'
                        }
                    }
                },
                center: {
                    stack: {
                        id: 'mainStack',
                        children: [
                            {
                                stack: {
                                    id: 'tab1Stack',
                                    children: [
                                      {
                                        component: {
                                          name: 'Home'
                                        }
                                      }
                                    ],
                                    options: {
                                      topBar: {
                                        leftButtons: [
                                          {
                                            id: 'buttonOne',
                                            icon: sources[0]
                                          }
                                        ],
                                      }
                                    }
                                  }
                                },
                        ],

                    }
                }
            }
        }
    });

Я не получаю после возвращения на главный домашний экран, почемуоткрывается навигационный ящик.

, а следующий код - после нажатия текста на навигационном ящике

goNew = () => {
    this.goClose()
      Navigation.push('mainStack', {
        component: {
          name: 'NewComp',
          passProps: {
            text: 'Pushed screen'
          },
          options: {
            topBar: {
              title: {
                text: 'New Component'
              }
            },
            sideMenu: {
              left: {
              enabled: false
              }
            }
          }
        }
      });
    }

Пожалуйста, помогите, если кто-нибудь может.заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

это происходит, когда вы открываете навигационную панель (боковое меню) при нажатии кнопки, например, homescreen, как

 navigationButtonPressed({ buttonId }) {
           if(buttonId == 'menu'){                  
                  Navigation.mergeOptions(this.props.componentId, {
                        sideMenu:{
                              left:{
                                    visible:true
                              }
                        }
                  })
            }
   }

, и закрываете боковое меню, проводя вправо / влево.На этом этапе параметр навигации для homescreen имеет значение

         sideMenu:{
             left:{
                 visible:true
             }
         }

, поэтому, когда ваш компонент homescreen снова появится в стеке, боковое меню появится в результате опции visible

решение этой проблемы находится в homescreen компонент subscribe to navigation events

 constructor(props) {
            super(props);
            Navigation.events().bindComponent(this); 
 }

и в вашем componentDidDisappear()

 Navigation.mergeOptions(this.props.componentId,{
            sideMenu:{
                left:{
                      visible:false
                }
          }
        })

где this.props.componentId - это идентификатор вашего homescreen компонента

0 голосов
/ 01 февраля 2019

В функции «Ящик навигации», когда вы нажимаете на новый экран, вам просто нужно закрыть ящик, прежде чем нажимать его, например:

goNew = () => {
  Navigation.mergeOptions(this.props.componentId, {
    sideMenu: {
      left: {
        visible: false
      }
    }
  })
    Navigation.push('mainStack', {
      component: {
        name: 'NewComp',
        passProps: {
          text: 'Pushed screen'
        },
        options: {
          topBar: {
            title: {
              text: 'New Component'
            }
          },
          sideMenu: {
            left: {
            enabled: false
            }
          }
        }
      }
    })
  }

, где this.props.componentId - это не что иное, как идентификатор компонента для вашего ящика.создан по умолчанию по реакции-нативной навигации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...