как исправить ошибку при нажатии на верхнюю кнопку

Перейдите по ссылке ниже и попробуйте нажать кнопку

Он запускается в codeandbox

введите здесь описание изображения

https://codesandbox.io/s/menuantd-ewelm


person Chi Bui    schedule 09.07.2019    source источник


Ответы (1)


Обновлено:

Я предпочитаю делать следующее, управляя openKeys, фактически не изменяя значения внутри него в состоянии, поэтому в методе рендеринга посмотрите комментарии в коде.

  render() {
    const { openKeys, collapsed } = this.state;
    // controllable openedKeys array that depends on collapsed value.
    const openedKeys = !collapsed ? openKeys : [];

    return (
      <div style={{ width: 256 }}>
        <Button
          type="primary"
          onClick={this.toggleCollapsed}
          style={{ marginBottom: 16 }}
        >
          <Icon type={this.state.collapsed ? "menu-unfold" : "menu-fold"} />
        </Button>
        <Menu
          openKeys={openedKeys} //passed the new controllable array here
          onOpenChange={this.onOpenChange}
          defaultSelectedKeys={["1"]}
          defaultOpenKeys={["sub1"]}
          mode="inline"
          theme="dark"
          inlineCollapsed={collapsed}
        >
...... rest of the code

================

Вам нужно очистить массив openKeys из вашего состояния, в нем указано, что подменю sub1 открылось, когда оно есть, поэтому при нажатии кнопки мы должны очистить его, чтобы закрыть открытые подменю.

  toggleCollapsed = () => {
    this.setState({
      collapsed: !this.state.collapsed,
      openKeys: [],
    });
  };

Конечно, добро пожаловать в StackOverflow, это радостная платформа с множеством замечательных разработчиков, которые готовы помочь своим опытом.

person Sultan H.    schedule 09.07.2019
comment
Поэтому, если я хочу нажать на кнопку, она вернет открытое подменю перед закрытием. Если это так, он закроет все, а не снова откроет подменю, как раньше. как это исправить - person Chi Bui; 09.07.2019
comment
Учтите, что мы скрыли меню, и оно рухнуло. Вы хотите, чтобы оно снова открывало подменю после повторного нажатия кнопки? я правильно понимаю? - person Sultan H.; 09.07.2019
comment
@ChiBui, пожалуйста, перепроверьте ответ, я обновил его правильным решением. - person Sultan H.; 09.07.2019
comment
@ChiBui Я разветвил прототип вашей песочницы и внес для вас изменения: codesandbox.io/s/menuantd- p874x - person Sultan H.; 09.07.2019
comment
Я очень рад, не забудьте отметить ответ как правильный ответ, чтобы другие знали, что решение было найдено. - person Sultan H.; 09.07.2019