@@ -112,7 +112,7 @@ const useAutosizeTextArea = ({
112112 maxHeight = Number . MAX_SAFE_INTEGER ,
113113 minHeight = 0 ,
114114} : UseAutosizeTextAreaProps ) => {
115- const [ init , setInit ] = React . useState ( true ) ;
115+ const initRef = React . useRef ( true ) ;
116116
117117 const resize = React . useCallback (
118118 ( node : HTMLTextAreaElement ) => {
@@ -121,13 +121,14 @@ const useAutosizeTextArea = ({
121121
122122 const offsetBorder = 2 ;
123123
124- if ( init ) {
124+ if ( initRef . current ) {
125125 node . style . minHeight = `${ minHeight + offsetBorder } px` ;
126126 if ( maxHeight > minHeight ) {
127127 node . style . maxHeight = `${ maxHeight } px` ;
128128 }
129129 node . style . height = `${ minHeight + offsetBorder } px` ;
130- setInit ( false ) ;
130+ initRef . current = false ;
131+ return ;
131132 }
132133
133134 const newHeight = Math . min (
@@ -137,25 +138,38 @@ const useAutosizeTextArea = ({
137138
138139 node . style . height = `${ newHeight } px` ;
139140 } ,
140- [ maxHeight , minHeight , setInit , init ]
141+ [ maxHeight , minHeight ]
141142 ) ;
142143
143144 const initResizer = React . useCallback (
144145 ( node : HTMLTextAreaElement ) => {
145- node . onkeyup = ( ) => resize ( node ) ;
146- node . onfocus = ( ) => resize ( node ) ;
147- node . oninput = ( ) => resize ( node ) ;
148- node . onresize = ( ) => resize ( node ) ;
149- node . onchange = ( ) => resize ( node ) ;
146+ const handleResize = ( ) => resize ( node ) ;
147+
148+ node . addEventListener ( "input" , handleResize ) ;
149+ node . addEventListener ( "focus" , handleResize ) ;
150+ node . addEventListener ( "change" , handleResize ) ;
151+ node . addEventListener ( "keyup" , handleResize ) ;
152+ node . addEventListener ( "resize" , handleResize ) ;
153+ if ( initRef . current ) {
154+ resize ( node ) ;
155+ }
150156
151- resize ( node ) ;
157+ // Cleanup function to remove event listeners
158+ return ( ) => {
159+ node . removeEventListener ( "input" , handleResize ) ;
160+ node . removeEventListener ( "focus" , handleResize ) ;
161+ node . removeEventListener ( "change" , handleResize ) ;
162+ node . removeEventListener ( "keyup" , handleResize ) ;
163+ node . removeEventListener ( "resize" , handleResize ) ;
164+ } ;
152165 } ,
153166 [ resize ]
154167 ) ;
155168
156169 React . useEffect ( ( ) => {
157170 if ( textAreaRef ) {
158- initResizer ( textAreaRef ) ;
171+ const cleanup = initResizer ( textAreaRef ) ;
172+ return cleanup ;
159173 }
160174 } , [ initResizer , textAreaRef ] ) ;
161175
0 commit comments