如何在鼠标悬停时打开react-bootstrap的Dropdown?

W.C*_*hen 11 javascript css web twitter-bootstrap reactjs

好的问题很简单.当鼠标悬停而不是单击时,我需要打开下拉列表.

目前我的代码如下.

    <Nav>
      <NavDropdown
        onMouseEnter = {()=> isOpen=true}
        open={isOpen}
        noCaret
        id="language-switcher-container"
      >
        <MenuItem>Only one Item</MenuItem>
      </NavDropdown>
    </Nav>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我试过onMouseEnter但没有效果.有人可以解决这个问题吗?我应该传递什么属性来实现这个目标.

API页面在这里是react-bootstrap API页面

Gar*_*ubb 12

一个更干净的纯CSS解决方案:

.dropdown:hover .dropdown-menu { display: block; }

  • 这不应该是公认的答案。只需尝试将鼠标移到下拉菜单元素上 - 下拉菜单将再次关闭。 (2认同)
  • 这在较新的版本中不起作用,下拉列表在第一次单击之前不会呈现。您需要先触发 onclick,然后才能通过 css 进行控制 (2认同)

小智 9

export class Nav extends React.Component {

  constructor(props) {
    super(props)
    this.state = { isOpen: false }
  }

  handleOpen = () => {
    this.setState({ isOpen: true })
  }

  handleClose = () => {
     this.setState({ isOpen: false })
  }

  render() {
    return (
       <Nav>
        <NavDropdown
          onMouseEnter = { this.handleOpen }
          onMouseLeave = { this.handleClose }
          open={ this.state.isOpen }
          noCaret
          id="language-switcher-container"
        >
          <MenuItem>Only one Item</MenuItem>
        </NavDropdown>
      </Nav>
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这能解决您的问题.

  • 道具“open”不再存在,它已重命名为“show” (7认同)

Dan*_*Dan -2

您可以复制此https://codepen.io/bsngr/pen/frDqh,它使用以下 JS

$('ul.nav li.dropdown').hover(function() {
  $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500);
}, function() {
  $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);
});
Run Code Online (Sandbox Code Playgroud)

或者您也可以安装这样的插件https://github.com/CWspear/bootstrap-hover-dropdown

编辑:引导程序的完美解决方案,但我现在注意到你说它是反应,我以前没有使用过它,但我不明白为什么上面的js即使需要调整也不起作用

  • 使用 jQuery 操作 DOM 违背了使用 React(组件库)的全部目的。 (2认同)