reactjs - React Material UI 选项卡 关闭
解决方案
单击关闭图标时,您不仅在执行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]
);
...现在你称之为使用
<a
className="closeTab"
title={"Close tab"}
onClick={(event) => handleClose(event, tab)}
>
<CloseIcon />
</a>
PS:如果要使用IconButton
组件而不是a
标签,请使用
<IconButton component="div" onClick={(event) => handleClose(event, tab)}>
<CloseIcon />
</IconButton>
这将避免您从可能已经遇到过的 material-ui 中获取错误。
Warning: validateDOMNesting(...): <button> cannot appear as a descendant of <button>.
推荐阅读
- python - 图像上像素(X,Y)的颜色强度 [OpenCV / Python]
- java - 聊天机器人与 java 代码交互 beetwen jenkins 和 Mattermost
- hashicorp-vault - Vault 的密钥撤销是否会影响被撤销密钥在使用它的服务中的有效性?
- javafx-8 - 如何使用 Google Play 开发者控制台轻松测试计费应用程序?
- php - PHP 简短的 if 语句,带有 continue 关键字并省略 else 部分
- python - 如何根据附加文档的标题自动填写表单域?
- jstl - 如何使用 JSTL 和 EL 获取动态表单字段名称的值
- python - Python中的NoneType-Error与yield
- bash - bash 脚本:获取空闲时间并进行比较
- google-maps - 是否可以仅使用 Google 的地理编码服务?