单击关闭图标时,您不仅执行handleClose,而且执行该handleChange函数。发生这种情况是由于事件冒泡的原理。
当某个元素上发生事件时,它首先在该元素上运行处理程序,然后在其父元素上运行处理程序,然后一直在其他祖先上运行。
--
要解决您的问题,您必须停止关闭图标的单击事件的事件传播。将你的修改handleClose为
const handleClose = useCallback(
(event, tabToDelete) => {
// stop event from propagating to the target element's parent
event.stopPropagation();
const tabToDeleteIndex = activetabs.findIndex(
tab => tab.id === tabToDelete.id
);
const updatedTabs = activetabs.filter((tab, index) => {
return index !== tabToDeleteIndex;
});
const previousTab =
activetabs[tabToDeleteIndex - 1] ||
activetabs[tabToDeleteIndex + 1] ||
{};
setActiveTabs(updatedTabs);
setActiveTab(previousTab.id);
},
[activetabs]
);
Run Code Online (Sandbox Code Playgroud)
...现在你用它来称呼它
<a
className="closeTab"
title={"Close tab"}
onClick={(event) => handleClose(event, tab)}
>
<CloseIcon />
</a>
Run Code Online (Sandbox Code Playgroud)
PS:如果你想使用IconButton组件而不是a标签,请使用
<IconButton component="div" onClick={(event) => handleClose(event, tab)}>
<CloseIcon />
</IconButton>
Run Code Online (Sandbox Code Playgroud)
这将避免您从 Material-ui 中收到错误,您可能已经遇到过该错误。
Warning: validateDOMNesting(...): <button> cannot appear as a descendant of <button>.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4455 次 |
| 最近记录: |