Skip to content

Commit e9f46a0

Browse files
committed
update key
1 parent b0829a4 commit e9f46a0

File tree

6 files changed

+25
-19
lines changed

6 files changed

+25
-19
lines changed

docs/examples/items.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import '../../assets/index.less';
66

77
export default () => (
88
<Menu
9-
itemsRender={(originNode, item) => {
9+
itemRender={(originNode, item) => {
1010
if (item.type === 'item') {
1111
return (
1212
<a href="https://ant.design" target="_blank" rel="noopener noreferrer">

src/Menu.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export interface MenuProps
6262
/** @deprecated Please use `items` instead */
6363
children?: React.ReactNode;
6464

65-
itemsRender?: (originalNode: React.ReactNode, item: NonNullable<ItemType>) => React.ReactNode;
65+
itemRender?: (originalNode: React.ReactNode, item?: NonNullable<ItemType>) => React.ReactNode;
6666

6767
disabled?: boolean;
6868
/** @private Disable auto overflow. Pls note the prop name may refactor since we do not final decided. */
@@ -246,7 +246,7 @@ const Menu = React.forwardRef<MenuRef, MenuProps>((props, ref) => {
246246

247247
popupRender,
248248

249-
itemsRender,
249+
itemRender,
250250
...restProps
251251
} = props as LegacyMenuProps;
252252

@@ -255,10 +255,10 @@ const Menu = React.forwardRef<MenuRef, MenuProps>((props, ref) => {
255255
measureChildList: React.ReactElement[],
256256
] = React.useMemo(
257257
() => [
258-
parseItems(children, items, EMPTY_LIST, _internalComponents, prefixCls, itemsRender),
259-
parseItems(children, items, EMPTY_LIST, {}, prefixCls, itemsRender),
258+
parseItems(children, items, EMPTY_LIST, _internalComponents, prefixCls, itemRender),
259+
parseItems(children, items, EMPTY_LIST, {}, prefixCls, itemRender),
260260
],
261-
[children, items, _internalComponents, prefixCls, itemsRender],
261+
[children, items, _internalComponents, prefixCls, itemRender],
262262
);
263263

264264
const [mounted, setMounted] = React.useState(false);

src/utils/commonUtil.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import toArray from '@rc-component/util/lib/Children/toArray';
22
import * as React from 'react';
33

4-
export function parseChildren(children: React.ReactNode | undefined, keyPath: string[]) {
4+
export function parseChildren(
5+
children: React.ReactNode | undefined,
6+
keyPath: string[],
7+
itemRender?: (originNode: React.ReactNode) => React.ReactNode,
8+
) {
59
return toArray(children).map((child, index) => {
610
if (React.isValidElement(child)) {
711
const { key } = child;
@@ -18,7 +22,9 @@ export function parseChildren(children: React.ReactNode | undefined, keyPath: st
1822
if (process.env.NODE_ENV !== 'production' && emptyKey) {
1923
cloneProps.warnKey = true;
2024
}
21-
25+
if (typeof itemRender === 'function') {
26+
return itemRender(React.cloneElement(child, cloneProps));
27+
}
2228
return React.cloneElement(child, cloneProps);
2329
}
2430

src/utils/nodeUtil.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function convertItemsToNodes(
1010
list: ItemType[],
1111
components: Required<Components>,
1212
prefixCls?: string,
13-
itemsRender?: (originNode: React.ReactNode, item: NonNullable<ItemType>) => React.ReactNode,
13+
itemRender?: (originNode: React.ReactNode, item: NonNullable<ItemType>) => React.ReactNode,
1414
) {
1515
const {
1616
item: MergedMenuItem,
@@ -32,13 +32,13 @@ function convertItemsToNodes(
3232
if (type === 'group') {
3333
originNode = (
3434
<MergedMenuItemGroup key={mergedKey} {...restProps} title={label}>
35-
{convertItemsToNodes(children, components, prefixCls, itemsRender)}
35+
{convertItemsToNodes(children, components, prefixCls, itemRender)}
3636
</MergedMenuItemGroup>
3737
);
3838
} else {
3939
originNode = (
4040
<MergedSubMenu key={mergedKey} {...restProps} title={label}>
41-
{convertItemsToNodes(children, components, prefixCls, itemsRender)}
41+
{convertItemsToNodes(children, components, prefixCls, itemRender)}
4242
</MergedSubMenu>
4343
);
4444
}
@@ -59,8 +59,8 @@ function convertItemsToNodes(
5959
);
6060
}
6161

62-
if (typeof itemsRender === 'function') {
63-
return itemsRender(originNode, opt);
62+
if (typeof itemRender === 'function') {
63+
return itemRender(originNode, opt);
6464
}
6565
return originNode;
6666
}
@@ -76,7 +76,7 @@ export function parseItems(
7676
keyPath: string[],
7777
components: Components,
7878
prefixCls?: string,
79-
itemsRender?: (originNode: React.ReactNode, item: NonNullable<ItemType>) => React.ReactNode,
79+
itemRender?: (originNode: React.ReactNode, item?: NonNullable<ItemType>) => React.ReactNode,
8080
) {
8181
let childNodes = children;
8282

@@ -89,8 +89,8 @@ export function parseItems(
8989
};
9090

9191
if (items) {
92-
childNodes = convertItemsToNodes(items, mergedComponents, prefixCls, itemsRender);
92+
childNodes = convertItemsToNodes(items, mergedComponents, prefixCls, itemRender);
9393
}
9494

95-
return parseChildren(childNodes, keyPath);
95+
return parseChildren(childNodes, keyPath, itemRender);
9696
}

tests/MenuItem.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ describe('MenuItem', () => {
232232
it('should wrap originNode with custom render', () => {
233233
const { container } = render(
234234
<Menu
235-
itemsRender={(originNode, item) => {
235+
itemRender={(originNode, item) => {
236236
if (item.type === 'item') {
237237
return (
238238
<a href="https://ant.design" target="_blank" rel="noopener noreferrer">

tests/Responsive.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jest.mock('rc-resize-observer', () => {
3030

3131
describe('Menu.Responsive', () => {
3232
beforeEach(() => {
33-
global.resizeProps = null;
33+
global.resizeProps = new Map<number, any>();
3434
jest.useFakeTimers();
3535
});
3636

@@ -122,7 +122,7 @@ describe('Menu.Responsive', () => {
122122
}));
123123
// Set container width
124124
act(() => {
125-
getResizeProps()[0].onResize({}, document.createElement('div'));
125+
getResizeProps()?.[0]?.onResize?.({}, document.createElement('div'));
126126
jest.runAllTimers();
127127
});
128128
spy.mockRestore();

0 commit comments

Comments
 (0)