代码之家  ›  专栏  ›  技术社区  ›  Qwerty

react路由器在从并发事件重新提交后停止路由

  •  0
  • Qwerty  · 技术社区  · 6 年前

    我有一个下拉菜单,可以通过 state .
    单击 button

    下拉列表包含我的应用程序中的链接,但是,当下拉列表被关闭时,路由转换被阻止。

    还需要隐藏路由转换的下拉列表 .

    1. 请向我解释一下发生了什么事
    2. 也请帮我修一下


    enter image description here

    class App extends React.Component {
      state = {
        isNavShown: false
      }
    
      showNav = () => this.setState({isNavShown: true})
    
      hideNav = event => {
        // ... some more logic ...
        // don't hide if autoHide is disabled
        if (autoHide.checked === false) return
    
        this.setState({isNavShown: false})
      }
    
      componentDidMount() {
        document.addEventListener('mousedown', this.hideNav)
      }
    
      // ...
    } 
    

    我也试过包装 setState 在里面 setTimeout ,但无济于事。

    这是完整的jsfiddle https://jsfiddle.net/nimareq/1kh47uey/

    1 回复  |  直到 6 年前
        1
  •  3
  •   Michael Sorensen    6 年前

    所以问题是,如果用户单击show navigation按钮和您构建的复选框之外的任何地方,hideNav函数就会隐藏nav。但是,如果用户单击导航本身,它将在您有机会导航用户之前被隐藏。

    实际上,浏览器会在文档冒泡到锚定标记click之前检测到您对文档所做的click事件监听器。当它到达那里的时候,锚标签就不见了。(我希望这是有意义的笑)

    if(nav.contains(event.target)) return;
    

    也别忘了在你的导航栏上添加id=“nav”或者你想叫它的任何东西。这样当你点击导航栏时导航栏就不会消失。如果你点击导航栏,它仍然会消失。