单击单元格内的图标时,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>
);
}
现场演示
我有一个单元格渲染器,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>
);
}