From b88479926c08f033e66142857b910f545fdb8d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E8=8F=9C=20Cai?= Date: Fri, 12 Jun 2026 21:30:00 +0800 Subject: [PATCH] fix(Steps): correct step index calculation and add reverse sequence test --- packages/components/steps/Steps.tsx | 19 ++++++++++++++----- .../components/steps/__tests__/steps.test.tsx | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/components/steps/Steps.tsx b/packages/components/steps/Steps.tsx index 6a1af98f60..1b0e428a8b 100644 --- a/packages/components/steps/Steps.tsx +++ b/packages/components/steps/Steps.tsx @@ -90,21 +90,30 @@ const Steps = forwardRefWithStatics( const stepItemList = useMemo(() => { if (options) { - const optionsDisplayList = sequence === 'reverse' ? options.reverse() : options; + const optionsLength = options.length; return options.map((item, index) => { - const stepIndex = sequence === 'reverse' ? optionsDisplayList.length - index - 1 : index; - return ; + const stepIndex = sequence === 'reverse' ? optionsLength - index - 1 : index; + return ( + + ); }); } const childrenList = React.Children.toArray(children); - const childrenDisplayList = sequence === 'reverse' ? childrenList.reverse() : childrenList; + const childrenLength = childrenList.length; return childrenList.map((child: React.ReactElement, index: number) => { - const stepIndex = sequence === 'reverse' ? childrenDisplayList.length - index - 1 : index; + const stepIndex = sequence === 'reverse' ? childrenLength - index - 1 : index; return React.cloneElement(child, { ...child.props, index: stepIndex, + value: child.props.value ?? index, status: handleStatus(child.props, index), }); }); diff --git a/packages/components/steps/__tests__/steps.test.tsx b/packages/components/steps/__tests__/steps.test.tsx index 45c3ca1975..aae0e11f0b 100644 --- a/packages/components/steps/__tests__/steps.test.tsx +++ b/packages/components/steps/__tests__/steps.test.tsx @@ -71,6 +71,24 @@ describe('Steps 组件测试', () => { expect(stepsItems.length).toBe(1); }); + test('sequence reverse 点击应返回逻辑下标', async () => { + const handleChange = vi.fn(); + + const { container } = render( + + + + + + , + ); + + const stepItems = container.querySelectorAll('.t-steps-item'); + // 点击逻辑下标为 3 的步骤(DOM 中第 4 项) + fireEvent.click(stepItems[3].querySelector('.t-steps-item__inner')); + expect(handleChange).toHaveBeenCalledWith(3, 1, expect.any(Object)); + }); + test('layout readonly 测试', async () => { const testId = 'step readonly test';