From 2c787b609d05a9e5a1ed8fdc1f8b1e8ca7a14c49 Mon Sep 17 00:00:00 2001 From: Lauri Date: Wed, 20 Nov 2024 12:30:22 +0100 Subject: [PATCH] Fix memory leak Presence component doesn't unmount itself, and by keeping a reference around for node's styles after the node has unmounted, the node itself cannot ever get garbage collected. This affects pretty much all radix primitive components. --- packages/react/presence/src/Presence.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react/presence/src/Presence.tsx b/packages/react/presence/src/Presence.tsx index e9da5615c..51066bd8a 100644 --- a/packages/react/presence/src/Presence.tsx +++ b/packages/react/presence/src/Presence.tsx @@ -153,7 +153,12 @@ function usePresence(present: boolean) { return { isPresent: ['mounted', 'unmountSuspended'].includes(state), ref: React.useCallback((node: HTMLElement) => { - if (node) stylesRef.current = getComputedStyle(node); + if (node) { + stylesRef.current = getComputedStyle(node); + } + else { + stylesRef.current = {} as any; + } setNode(node); }, []), };