Панель навигации открывается после возвращения с другого экрана
Я использую Wix's response-native-navigation 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 ответа
Это происходит, когда вы открываете навигационную панель (sidemenu) при нажатии кнопки, скажем, компонента 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
составная часть
В функции "Ящик навигации", когда вы нажимаете на новый экран, вам просто нужно закрыть ящик перед тем, как нажать на него, например:
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
это не что иное, как идентификатор компонента вашего ящика, созданный по умолчанию по реакции-нативной навигации.