From 1268bd286e9847c0b3df3adef6e5a4f3a83a78fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=B3=E5=BB=B7=E5=AE=89?= <73953029+nrps9909@users.noreply.github.com> Date: Fri, 28 Aug 2026 16:06:21 +0800 Subject: [PATCH] fix: resize uncontrolled textarea values --- src/ResizableTextArea.tsx | 2 +- tests/ResizableTextArea.test.tsx | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/ResizableTextArea.tsx b/src/ResizableTextArea.tsx index 23f27d8..7420007 100644 --- a/src/ResizableTextArea.tsx +++ b/src/ResizableTextArea.tsx @@ -86,7 +86,7 @@ const ResizableTextArea = React.forwardRef( if (needAutoSize) { startResize(); } - }, [value, minRows, maxRows, needAutoSize]); + }, [mergedValue, minRows, maxRows, needAutoSize]); useLayoutEffect(() => { if (resizeState === RESIZE_START) { diff --git a/tests/ResizableTextArea.test.tsx b/tests/ResizableTextArea.test.tsx index 60b462d..f11b91e 100644 --- a/tests/ResizableTextArea.test.tsx +++ b/tests/ResizableTextArea.test.tsx @@ -1,4 +1,4 @@ -import { render } from '@testing-library/react'; +import { fireEvent, render } from '@testing-library/react'; import React from 'react'; import type { ResizableTextAreaRef, TextAreaProps } from '../src'; import { ResizableTextArea } from '../src'; @@ -21,3 +21,20 @@ it('should have no onPressEnter prop', () => { render(); expect(resizableTextAreaProps().onPressEnter).toBeUndefined(); }); + +it('should resize when an uncontrolled value changes', () => { + const onInternalAutoSize = jest.fn(); + const props = { + autoSize: true, + defaultValue: 'test', + onInternalAutoSize, + } as TextAreaProps & { onInternalAutoSize: VoidFunction }; + const { container } = render(); + + onInternalAutoSize.mockClear(); + fireEvent.change(container.querySelector('textarea'), { + target: { value: 'a longer uncontrolled value' }, + }); + + expect(onInternalAutoSize).toHaveBeenCalledTimes(1); +});