onBlur在React下拉组件中不起作用

问题描述 投票:0回答:1

我创建了以下React Dropdown组件:

const Dropdown = ({
  titleTag = 'button',
  titleCss,
  title,
  icon,
  menuCss,
  children,
  open,
  ...props
}) => {
  const [isOpen, setIsOpen] = React.useState(false)

  const handleClick = () => setIsOpen(state => !state)
  const handleBlur = () => setIsOpen(false)

  return (
    <DropdownBase>
      <Trigger
        as={titleTag}
        css={titleCss}
        onClick={handleClick}
        onBlur={handleBlur}
      >
        {title}
        {icon}
      </Trigger>
      <Submenu css={menuCss} open={isOpen}>
        {children}
      </Submenu>
    </DropdownBase>
  )
}

我的问题是,如果我在菜单外单击,菜单将不会关闭。我可以通过单击打开和关闭菜单。但是我不能通过单击远离菜单来关闭菜单-这是我认为使用handleBlur功能会发生的情况。确实,该功能正常工作了[[之前我将下拉菜单重构为一个组件。

所以,我必须做些什么,以便每当我在下拉菜单之外单击时,下拉菜单都会关闭?

谢谢。

注意:

如果相关,以下是组成下拉菜单的相关样式化组件: const DropdownBase = styled.div` display: inline-flex; position: relative; z-index: 10; ` const Trigger = styled.div` cursor: pointer; ` const Submenu = styled.div` display: ${props => (props.open ? 'block' : 'none')}; position: absolute; top: 100%; left: 0; z-index: 20; ${Link} { display: inline-block; width: 100%; } `
javascript reactjs dropdown styled-components react-component
1个回答
0
投票
div元素无法接收focus事件,您可以将tabindex="0"添加到Trigger组件中
© www.soinside.com 2019 - 2024. All rights reserved.