diff --git a/src/ResizableTextArea.tsx b/src/ResizableTextArea.tsx index 595f455..09cf696 100644 --- a/src/ResizableTextArea.tsx +++ b/src/ResizableTextArea.tsx @@ -1,10 +1,10 @@ -import * as React from 'react'; +import classNames from 'classnames'; import ResizeObserver from 'rc-resize-observer'; import omit from 'rc-util/lib/omit'; -import classNames from 'classnames'; -import calculateNodeHeight from './calculateNodeHeight'; -import type { TextAreaProps } from '.'; +import * as React from 'react'; import shallowEqual from 'shallowequal'; +import type { TextAreaProps } from '.'; +import calculateNodeHeight from './calculateNodeHeight'; // eslint-disable-next-line @typescript-eslint/naming-convention enum RESIZE_STATUS { @@ -70,10 +70,10 @@ class ResizableTextArea extends React.Component { resizeOnNextFrame = () => { cancelAnimationFrame(this.nextFrameActionId); - this.nextFrameActionId = requestAnimationFrame(this.resizeTextarea); + this.nextFrameActionId = requestAnimationFrame(() => this.resizeTextarea()); }; - resizeTextarea = () => { + resizeTextarea = (silent?: boolean) => { const { autoSize } = this.props; if (!autoSize || !this.textArea) { return; @@ -85,6 +85,12 @@ class ResizableTextArea extends React.Component { minRows, maxRows, ); + if (silent) { + this.setState({ + textareaStyles, + }); + return; + } this.setState( { textareaStyles, resizeStatus: RESIZE_STATUS.RESIZING }, () => { diff --git a/src/index.tsx b/src/index.tsx index 5ae01b5..cd2d60d 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import ResizableTextArea from './ResizableTextArea'; import type { AutoSizeType } from './ResizableTextArea'; +import ResizableTextArea from './ResizableTextArea'; export type HTMLTextareaProps = React.TextareaHTMLAttributes; @@ -62,7 +62,7 @@ class TextArea extends React.Component { handleChange = (e: React.ChangeEvent) => { const { onChange } = this.props; this.setValue(e.target.value, () => { - this.resizableTextArea.resizeTextarea(); + this.resizableTextArea.resizeTextarea(true); }); if (onChange) { onChange(e);