From d677d00f4a68fb43e366065fcdb6ee2b3fe8a357 Mon Sep 17 00:00:00 2001 From: wuxh Date: Thu, 12 Jan 2023 17:46:24 +0800 Subject: [PATCH 1/2] feat: add forwardRef --- src/Collapse.tsx | 11 ++++++++--- src/Panel.tsx | 10 +++++----- tests/index.spec.tsx | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 8 deletions(-) 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..30922ac 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.only('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')); + }); }); From c87e13f1507384cad8dca59c57dd112999381ba7 Mon Sep 17 00:00:00 2001 From: wuxh Date: Thu, 12 Jan 2023 18:04:47 +0800 Subject: [PATCH 2/2] update --- tests/index.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx index 30922ac..a76b01b 100644 --- a/tests/index.spec.tsx +++ b/tests/index.spec.tsx @@ -639,7 +639,7 @@ describe('collapse', () => { expect(container.querySelectorAll('.rc-collapse-item')).toHaveLength(2); }); - it.only('ref should work', () => { + it('ref should work', () => { const ref = React.createRef(); const panelRef = React.createRef(); const { container } = render(