diff --git a/src/Collapse.tsx b/src/Collapse.tsx index 8974365..3466d0e 100644 --- a/src/Collapse.tsx +++ b/src/Collapse.tsx @@ -15,7 +15,7 @@ function getActiveKeysArray(activeKey: React.Key | React.Key[]) { return currentActiveKey.map((key) => String(key)); } -function Collapse(props: CollapseProps) { +const Collapse = React.forwardRef((props, ref) => { const { prefixCls = 'rc-collapse', destroyInactivePanel = false, @@ -111,10 +111,15 @@ function Collapse(props: CollapseProps) { // ======================== Render ======================== return ( -
+
{children}
); -} +}); export default Object.assign(Collapse, { Panel: CollapsePanel }); diff --git a/src/Panel.tsx b/src/Panel.tsx index 62dcb20..7d87fd7 100644 --- a/src/Panel.tsx +++ b/src/Panel.tsx @@ -5,7 +5,7 @@ import KeyCode from 'rc-util/lib/KeyCode'; import CSSMotion from 'rc-motion'; import PanelContent from './PanelContent'; -function CollapsePanel(props: CollapsePanelProps) { +const CollapsePanel = React.forwardRef((props, ref) => { const { showArrow = true, headerClass, @@ -88,7 +88,7 @@ function CollapsePanel(props: CollapsePanelProps) { // ======================== Render ======================== return ( -
+
{showArrow && iconNode} - {({ className: motionClassName, style: motionStyle }, ref) => { + {({ className: motionClassName, style: motionStyle }, motionRef) => { return (
); -} +}); export default CollapsePanel; diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx index 44e067d..a76b01b 100644 --- a/tests/index.spec.tsx +++ b/tests/index.spec.tsx @@ -638,4 +638,18 @@ describe('collapse', () => { expect(container.querySelectorAll('.rc-collapse-item')).toHaveLength(2); }); + + it('ref should work', () => { + const ref = React.createRef(); + const panelRef = React.createRef(); + const { container } = render( + + + first + + , + ); + expect(ref.current).toBe(container.firstChild); + expect(panelRef.current).toBe(container.querySelector('.rc-collapse-item')); + }); });