Skip to content

Commit 49d7d04

Browse files
mxschmittAndarist
andauthored
Move resize listener to a layout effect (#305)
* fix: replace useEffect with useLayoutEffect for React 17 `useEffect` cleanup runs since React 17 asynchronously thats why it needs to be changed Fixes #259 * Update .changeset/clean-kiwis-boil.md Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
1 parent 9ba98b9 commit 49d7d04

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

.changeset/clean-kiwis-boil.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'react-textarea-autosize': patch
3+
---
4+
5+
Moved internal `'resize'` listener to the layout effect since React 17 calls cleanups of regular effects asynchronously. This ensures that we don't ever try to access the already unmounted ref in our listener.

src/hooks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export { default as useComposedRef } from 'use-composed-ref';
66
export const useWindowResizeListener = (listener: (event: UIEvent) => any) => {
77
const latestListener = useLatest(listener);
88

9-
React.useEffect(() => {
9+
React.useLayoutEffect(() => {
1010
const handler: typeof listener = (event) => {
1111
latestListener.current(event);
1212
};

src/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ const TextareaAutosize: React.ForwardRefRenderFunction<
9292

9393
if (typeof document !== 'undefined') {
9494
React.useLayoutEffect(resizeTextarea);
95+
useWindowResizeListener(resizeTextarea);
9596
}
96-
useWindowResizeListener(resizeTextarea);
9797

9898
return <textarea {...props} onChange={handleChange} ref={ref} />;
9999
};

0 commit comments

Comments
 (0)