nickola105
@nickola105
начинающий

Как закрыть выпадающею меню в компоненте react?

Ребятушки, всем привет.
Есть вот такой элемент управления с выпадающем контекстном меню
render() {
    return (
      <div className="btn-dwn__wrap marginr-10">
          <button className={"btn-dwn btn--red" + (this.state.dropdownVisible ? ' active' : '')} onClick={this.handleFilterClick.bind(this)}>
            <svg className="icon" viewBox="0 0 100 100">
              <path d="M38.25,50h23.5v31.333L38.25,97V50z M3,3v7.833l35.25,35.25h23.5L97,10.833V3H3z"/>
            </svg>
          </button>
          <div className={"btn-dwn__dropdown" + (this.state.dropdownVisible ? ' active' : '')}></div>
      </div>
    );
  }

есть такой обработчик
handleFilterClick(event) {
    const target = event.target;
    this.setState(prevState => ({
      dropdownVisible: !prevState.dropdownVisible
    }))
  }

при клике то фильтру контекстное меню переключается норм. как задумано. А вот как сделать чтобы оно закрывалась если таргет не кнопка и не само меню? Подскажите плиз
  • Вопрос задан
  • 1311 просмотров
Решения вопроса 1
@davidnum95
Как вариант:
componentDidMount() {
    document.addEventListener('click', this.onClickOutside);
  }

  componentWillUnmount() {
    document.removeEventListener('click', this.onClickOutside);
  }

  onClickOutside = () => {
    this.setState({ visible: false });
  }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GreyCrew
@GreyCrew
Full-stack developer
Как вариант могу подсказать - при открытии модального окна создать компонент с прозрачностью, width:100% height:100% и z-index < модалки
и повесить на него при клике обработчик закрытия модального окна

Для удобства можно поместить его в компонент модалки и просто скрывать display: none;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы