diff --git a/components/collapse/Collapse.tsx b/components/collapse/Collapse.tsx index 35eb6761151d..73e55b722dbf 100644 --- a/components/collapse/Collapse.tsx +++ b/components/collapse/Collapse.tsx @@ -45,14 +45,15 @@ export default class Collapse extends React.Component { renderExpandIcon = (panelProps: PanelProps = {}, prefixCls: string) => { const { expandIcon } = this.props; - const icon = expandIcon ? ( + const icon = (expandIcon ? ( expandIcon(panelProps) ) : ( - ); + )) as React.ReactNode; + return React.isValidElement(icon) ? React.cloneElement(icon as any, { - className: `${prefixCls}-arrow`, + className: classNames(icon.props.className, `${prefixCls}-arrow`), }) : icon; }; diff --git a/components/collapse/__tests__/index.test.js b/components/collapse/__tests__/index.test.js index 35a065e9f8f8..d2c5104721ce 100644 --- a/components/collapse/__tests__/index.test.js +++ b/components/collapse/__tests__/index.test.js @@ -27,6 +27,22 @@ describe('Collapse', () => { expect(wrapper.render()).toMatchSnapshot(); }); + it('should keep the className of the expandIcon', () => { + const wrapper = mount( + ( + + )} + > + + , + ); + + expect(wrapper.find('.custom-expandicon-classname').exists()).toBe(true); + }); + it('should render extra node of panel', () => { const wrapper = mount(