Skip to content

Commit 3a7d168

Browse files
authored
chore: optimize menuaction list renderer (#2775)
1 parent d308858 commit 3a7d168

1 file changed

Lines changed: 28 additions & 19 deletions

File tree

  • packages/core-browser/src/components/actions

packages/core-browser/src/components/actions/index.tsx

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -88,36 +88,42 @@ export const MenuActionList: React.FC<{
8888
(dataSource: MenuNode[], key?: string) =>
8989
dataSource.map((menuNode, index) => {
9090
if (menuNode.id === SeparatorMenuItemNode.ID) {
91-
return <Menu.Divider key={`divider-${index}`} className={styles.menuItemDivider} />;
91+
return null;
9292
}
93-
93+
const hasSeparator = dataSource[index + 1] && dataSource[index + 1].id === SeparatorMenuItemNode.ID;
9494
if (menuNode.id === SubmenuItemNode.ID) {
9595
// 子菜单项为空时不渲染
9696
if (!Array.isArray(menuNode.children) || !menuNode.children.length) {
9797
return null;
9898
}
9999

100100
return (
101-
<Menu.SubMenu
102-
key={`${(menuNode as SubmenuItemNode).submenuId}-${index}`}
103-
className={styles.submenuItem}
104-
popupClassName='kt-menu'
105-
title={<MenuAction hasSubmenu data={menuNode} />}
106-
>
107-
{recursiveRender(menuNode.children, menuNode.label)}
108-
</Menu.SubMenu>
101+
<>
102+
<Menu.SubMenu
103+
key={`${(menuNode as SubmenuItemNode).submenuId}-${index}`}
104+
className={styles.submenuItem}
105+
popupClassName='kt-menu'
106+
title={<MenuAction hasSubmenu data={menuNode} />}
107+
>
108+
{recursiveRender(menuNode.children, menuNode.label)}
109+
</Menu.SubMenu>
110+
{hasSeparator ? <Menu.Divider key={`divider-${index}`} className={styles.menuItemDivider} /> : null}
111+
</>
109112
);
110113
}
111114

112115
return (
113-
<Menu.Item
114-
id={`${menuNode.id}-${index}`}
115-
key={`${menuNode.id}-${key}-${index}`}
116-
className={styles.menuItem}
117-
disabled={menuNode.disabled}
118-
>
119-
<MenuAction data={menuNode} disabled={menuNode.disabled} />
120-
</Menu.Item>
116+
<>
117+
<Menu.Item
118+
id={`${menuNode.id}-${index}`}
119+
key={`${menuNode.id}-${key}-${index}`}
120+
className={styles.menuItem}
121+
disabled={menuNode.disabled}
122+
>
123+
<MenuAction data={menuNode} disabled={menuNode.disabled} />
124+
</Menu.Item>
125+
{hasSeparator ? <Menu.Divider key={`divider-${index}`} className={styles.menuItemDivider} /> : null}
126+
</>
121127
);
122128
}),
123129
[],
@@ -453,7 +459,10 @@ export function InlineActionBar<T = undefined, U = undefined, K = undefined, M =
453459
// 因为这里的 context 塞到 useMenus 之后会自动把参数加入到 MenuItem.execute 里面
454460
const [navMenu, moreMenu] = useMenus(menus, separator, context, debounce);
455461

456-
const navMenus = useMemo(() => isFlattenMenu ? [...navMenu, ...moreMenu] : navMenu, [navMenu, moreMenu, isFlattenMenu]);
462+
const navMenus = useMemo(
463+
() => (isFlattenMenu ? [...navMenu, ...moreMenu] : navMenu),
464+
[navMenu, moreMenu, isFlattenMenu],
465+
);
457466

458467
// inline 菜单不取第二组,对应内容由关联 context menu 去渲染
459468
return (

0 commit comments

Comments
 (0)