【问题标题】:Setting state with delay via onMouseEnter in React component在 React 组件中通过 onMouseEnter 设置延迟状态
【发布时间】:2021-02-06 01:32:17
【问题描述】:

我有一个由一系列 Material UI 的 ListItems 组成的菜单。当鼠标进入给定项目时,我使用其中一个道具将状态提升到父组件,该组件负责确定需要显示哪个子菜单。以下是相关行:

  • onMouseEnter 在每个列表项中:
onMouseEnter={event => openDropDown(event, menuItem, subMenuItem)}
  • openDropDown 调用setSubMenuItem 提升状态:
  const openDropDown = (event, menuItem, subMenuItem) => {
    if (subMenuItem.subMenu) {
      setSubMenuItem({ ...subMenuItem, parent: menuItem });
      setAnchorEl(event.target.getBoundingClientRect());
    } else {
      closeDropDown();
    }
  };

但是,状态转换比鼠标移动要慢。这会导致状态“卡住”在到达目的地的路径上的第一个项目中。因此,项目 2 和 6 的子菜单分别显示在场景 A 和 B 中(而不是预期的 4 和 3):

任何确保设置状态与鼠标移动同步的想法都将受到欢迎。我尝试在setTimeout 内调用openDropDown,但当我从一个项目移动到下一个项目时,它会导致每个子菜单都弹出。

【问题讨论】:

  • 您能否发布更多代码以使您的情况更容易重现?希望能够复制粘贴到代码盒中来玩

标签: reactjs material-ui


【解决方案1】:

我最终按照this thread 中的建议延迟了状态转换,并且工作得很好。

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2019-02-17
    • 2019-11-23
    • 1970-01-01
    • 2021-04-17
    • 2018-10-30
    • 1970-01-01
    • 2020-06-11
    • 2023-01-14
    相关资源
    最近更新 更多