单击单元格内的图标时,Ag-Grid 防止 onRowClicked 事件

Ag-Grid Prevent onRowClicked event when clicking icon inside cell

我有一个单元格渲染器,returns 名称 属性 和一行对象:

const nameRenderer = ({ value, data }) => {
    const { id: queueId } = data;
    return (
      <Box>
        <div className="row-hidden-menu">
            <IconButton
              icon="menu"
              onClick={({ event }) => {
                event.preventDefault();
                event.stopPropagation();
                onMenuClick();
              }}
            />
        </div>
      </Box>
    );
  };

我遇到的问题是我有一个 onRowClick 函数,但我不希望在单击 nameRenderer 中的图标时调用该函数。现在,当菜单打开时,onRowClicked 事件导航到一个新页面。

请参阅 this answer 了解更多 in-depth 解释,但要点是您从 onClick 回调收到的 event 是 React 的合成事件,它是一个包装器本机事件。从合成事件中调用 stopPropagation() 不会阻止真实事件冒泡,这是 React 框架长期以来的一个怪癖。

解决方案:将您的 onClick 事件处理程序附加到真正的 DOM 元素。

function ButtonCellRenderer() {
  return (
    <button
      ref={(ref) => {
        if (!ref) return;

        ref.onclick = (e) => {
          console.log("native event handler");
          e.stopPropagation(); // this works
          // put your logic here instead because e.stopPropagation() will
          // stop React's synthetic event
        };
      }}
      onClick={(e) => {
        e.stopPropagation(); // this doesn't work
      }}
    >
      Click me
    </button>
  );
}

现场演示