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

Bat*_*man 3 javascript reactjs ag-grid ag-grid-react

我有一个单元格渲染器,它返回行上的名称属性和对象:

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>
    );
  };
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

Nea*_*arl 8

有关更深入的解释,请参阅此答案event,但要点是,您从onClick回调中收到的是 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>
  );
}
Run Code Online (Sandbox Code Playgroud)

现场演示

编辑 63964553/ag-grid-prevent-onrowclicked-event-when-clicking-icon-inside-cell