Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions src/utils/nodeUtil.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,11 @@ function convertItemsToNodes(
if (type === 'divider') {
return <MergedDivider key={mergedKey} {...restProps} />;
}

const hasExtra = !!extra || extra === 0;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

为了使代码更简洁,这里的条件判断可以省略 !!。在 JavaScript 的布尔运算中,extra 会被自动转换为布尔值进行判断,因此 !!extraextra 在此处的逻辑效果是等价的。

Suggested change
const hasExtra = !!extra || extra === 0;
const hasExtra = extra || extra === 0;

return (
<MergedMenuItem key={mergedKey} {...restProps} extra={extra}>
{label}
{(!!extra || extra === 0) && (
<span className={`${prefixCls}-item-extra`}>{extra}</span>
)}
{hasExtra ? <span className={`${prefixCls}-item-label`}>{label}</span> : label}
{hasExtra && <span className={`${prefixCls}-item-extra`}>{extra}</span>}
Comment on lines +53 to +54
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

潜在问题:prefixCls 可能为 undefined 导致无效的 class 名称

prefixClsundefined 时(函数参数中标记为可选),模板字符串 `${prefixCls}-item-label` 会生成 "undefined-item-label" 这样的无效 class 名称。

建议添加保护逻辑:

🔎 建议的修复方案

方案一:添加默认值

-            {hasExtra ? <span className={`${prefixCls}-item-label`}>{label}</span> : label}
-            {hasExtra && <span className={`${prefixCls}-item-extra`}>{extra}</span>}
+            {hasExtra ? <span className={prefixCls ? `${prefixCls}-item-label` : 'item-label'}>{label}</span> : label}
+            {hasExtra && <span className={prefixCls ? `${prefixCls}-item-extra` : 'item-extra'}>{extra}</span>}

方案二:在函数开始处验证 prefixCls
convertItemsToNodes 函数中添加断言或默认值:

function convertItemsToNodes(
  list: ItemType[],
  components: Required<Components>,
  prefixCls: string = 'rc-menu', // 添加默认值
) {
  // ...
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{hasExtra ? <span className={`${prefixCls}-item-label`}>{label}</span> : label}
{hasExtra && <span className={`${prefixCls}-item-extra`}>{extra}</span>}
{hasExtra ? <span className={prefixCls ? `${prefixCls}-item-label` : 'item-label'}>{label}</span> : label}
{hasExtra && <span className={prefixCls ? `${prefixCls}-item-extra` : 'item-extra'}>{extra}</span>}
🤖 Prompt for AI Agents
In src/utils/nodeUtil.tsx around lines 53-54, the template strings using
prefixCls can produce invalid class names when prefixCls is undefined; ensure
prefixCls has a safe default or validate it at function entry (e.g., set
prefixCls = 'rc-menu' or assert/throw if missing) so subsequent
`${prefixCls}-item-label` and `${prefixCls}-item-extra` produce valid class
names; update the function signature or add an early guard to normalize
prefixCls before use.

</MergedMenuItem>
);
}
Expand Down
12 changes: 10 additions & 2 deletions tests/__snapshots__/MenuItem.spec.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ exports[`MenuItem overwrite default role should set extra to group option 1`] =
role="menuitem"
tabindex="-1"
>
Menu Item 1
<span
class="rc-menu-item-label"
>
Menu Item 1
</span>
<span
class="rc-menu-item-extra"
>
Expand All @@ -40,7 +44,11 @@ exports[`MenuItem overwrite default role should set extra to option 1`] = `
role="menuitem"
tabindex="-1"
>
Top Menu Item
<span
class="rc-menu-item-label"
>
Top Menu Item
</span>
<span
class="rc-menu-item-extra"
>
Expand Down