Принудительная перерисовка иконки Гамбургера при нажатии на кнопку на SideMenu - PullRequest
0 голосов
/ 01 января 2019

Когда пользователь нажимает на кнопку страницы в SideMenu, ящик закрывается, и происходит навигация.

Компонент HamburgerMenu имеет внутреннее состояние, в котором указано, должен ли он быть знаком гамбургера или знаком «X».".

Проблема в том, что HamburgerMenu не знает об этой навигации (и, следовательно, не знает о том, что ящик был закрыт), поэтому значок остается" X ", когда ящик закрыт пользователемщелкните.

Я не могу найти способ заставить SideMenu уведомить HamburgerMenu об изменении / событии.

Вот соответствующий код из App.js:

const DrawerNavigator = createDrawerNavigator({
  Home: {
    screen: HomeScreen
  },
  Settings: {
    screen: SettingsScreen
  }
}, {
  initialRouteName: 'Home',
  contentComponent: SideMenu
});

const AppNavigator = createStackNavigator({
    DrawerNavigator: {
      screen: DrawerNavigator,
      navigationOptions: ({ navigation }) => ({
        headerLeft: <HamburgerMenu navigation={navigation} />           
    })
  }
});

const AppContainer = createAppContainer(AppNavigator);
export default AppContainer;

РЕДАКТИРОВАТЬ: Вот мой код HamburgerMenu:

export default class HamburgerMenu extends Component {
    constructor(props){
        super(props);
        this.state={
            active: false
        }
    }

    onPress(){
        let newActive = !this.state.active;
        this.setState({active: newActive});
        if(newActive){
            this.props.navigation.dispatch(DrawerActions.openDrawer())
        }
        else {            
            this.props.navigation.dispatch(DrawerActions.closeDrawer())
        }
    }

    render(){
        return (
        <Hamburger active={this.state.active} type="spinCross" onPress={this.onPress.bind(this)} />
        );
    }
}

Спасибо!

1 Ответ

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

для ящика нет события, как сейчас, но вы можете сделать свое собственное, определив, открыт ящик или закрыт

const parent = this.props.navigation.dangerouslyGetParent();
const isDrawerOpen = parent && parent.state && parent.state.isDrawerOpen;

, чтобы вы могли поддерживать состояние щелчка меню внутри HamburgerMenu

или вы также можете прослушивать действие с редуксом, которое немного сложнее

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