React怎样实现点击其他地方隐藏弹出的菜单

我们经常遇到这种需求: 点击导航栏弹出菜单, 点击其他地方收回菜单.

前者比较容易实现, 在onClick中可以设置state, 通过state来判断组件的className进而实现菜单组件的显示与隐藏.

后者, 点击其他地方收回菜单, 应该怎么弄呢?

比较好的实现方法步骤如下:

  1. componentDidMount()中添加document的监听事件, 监听全局的click
componentDidMount() {
    document.addEventListener('click', this.hideAllMenu);
  }

hideAllMenu = () => {
    this.setState({
      checkBtnMenu: false,
      newBtnMenu: false,
      mineBtnMenu: false,
    })
  }

2.点击按钮显示菜单, 但是要在点击按钮时就把时间冒泡阻断, 防止触发全局点击隐藏菜单的方法. 注意此处阻断冒泡的方法应该这样写:e.nativeEvent.stopImmediatePropagation();

showCheckMenu = (event) => {
    this.stopPropagation(event);
    this.setState({
     checkBtnMenu: !this.state.checkBtnMenu,
     newBtnMenu: false,
     mineBtnMenu: false,
    })
  }
  showNewMenu = (event) => {
    this.stopPropagation(event);
    this.setState({
      checkBtnMenu: false,
      mineBtnMenu: false,
      newBtnMenu: !this.state.newBtnMenu,
    })
  }
  showMineMenu = (event) => {
    this.stopPropagation(event);
    this.setState({
      checkBtnMenu: false,
      newBtnMenu: false,
      mineBtnMenu: !this.state.mineBtnMenu,
    })
  }

  stopPropagation(e) {
        e.nativeEvent.stopImmediatePropagation();
    }
  1. 把点击方法绑定在按钮上, 即可
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 47,082评论 22 665
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,936评论 0 17
  • 在项目开发中我们可能会遇到这样子的情况,比如在我们登陆的时候需要把数据发送给服务器进行比对,通常我们的做法是当用户...
    Codepgq阅读 5,065评论 2 12
  • 是母亲把我打醒的,她骂我畜生。我不知道自己哪里错了,她就拉我去看三妮。 三妮躺在母亲的床上,冻的直发抖。 母亲说,...
    百里喵阅读 2,563评论 0 0
  • 我79岁的时候,描了一幅故乡的地图,断断续续的曲线,指向天空和土地。 其中的土地里,埋了烂铁,生猪和我的牙齿。 我...
    青蛙他爷爷阅读 2,383评论 0 2

友情链接更多精彩内容