From cbc6c96c2b802c53a903f39f7e240e637550cfd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E5=BD=B1?= <15766799@qq.com> Date: Sat, 1 Aug 2026 18:11:00 +0800 Subject: [PATCH] fix(Cascader): preserve normalized option keys --- .../cascader/__tests__/cascader.spec.tsx | 21 +++++++++++++++++++ src/packages/cascader/utils.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/packages/cascader/__tests__/cascader.spec.tsx b/src/packages/cascader/__tests__/cascader.spec.tsx index 5152d3b5a3..47f63c743d 100644 --- a/src/packages/cascader/__tests__/cascader.spec.tsx +++ b/src/packages/cascader/__tests__/cascader.spec.tsx @@ -3,6 +3,7 @@ import { render, fireEvent, waitFor } from '@testing-library/react' import '@testing-library/jest-dom' import { CascaderOption } from '@nutui/nutui-react' import { Cascader } from '../cascader' +import { normalizeOptions } from '../utils' const mockOptions = [ { @@ -86,6 +87,26 @@ const mockConvertOptions = [ ] describe('Cascader', () => { + it('normalizes mapped fields after preserving unrelated option fields', () => { + const options = [{ text: '北京', value: '021' }] + + expect( + normalizeOptions(options, { + textKey: 'text', + valueKey: 'text', + childrenKey: 'children', + }) + ).toEqual([{ text: '北京', value: '北京', children: undefined }]) + + expect( + normalizeOptions(options, { + textKey: 'value', + valueKey: 'value', + childrenKey: 'children', + }) + ).toEqual([{ text: '021', value: '021', children: undefined }]) + }) + it('options', async () => { const { container } = render( diff --git a/src/packages/cascader/utils.ts b/src/packages/cascader/utils.ts index 69139ab34b..4fbe087176 100644 --- a/src/packages/cascader/utils.ts +++ b/src/packages/cascader/utils.ts @@ -13,10 +13,10 @@ export const normalizeOptions = ( ...others } = opt return { + ...others, text, value, children: normalizeOptions(children, keyMap), - ...others, } as CascaderOption }) }