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); +});