From 8cae68c73f3d9458bb715e8fdf3bd0ab31edadaa Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Mon, 19 Nov 2018 10:58:14 +0000 Subject: [PATCH] Clear memoizedState on unmount of fiber to avoid memory leak (#14218) * Clear properties on unmount of fiber to ensure objects are not retained --- packages/react-reconciler/src/ReactFiberCommitWork.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react-reconciler/src/ReactFiberCommitWork.js b/packages/react-reconciler/src/ReactFiberCommitWork.js index 55a39ee640db8..0dc3d27f1dcfb 100644 --- a/packages/react-reconciler/src/ReactFiberCommitWork.js +++ b/packages/react-reconciler/src/ReactFiberCommitWork.js @@ -726,11 +726,20 @@ function detachFiber(current: Fiber) { // get GC:ed but we don't know which for sure which parent is the current // one so we'll settle for GC:ing the subtree of this child. This child // itself will be GC:ed when the parent updates the next time. + // We do not null out the 'nextEffect' field as it causes tests to fail. current.return = null; current.child = null; + current.memoizedState = null; + current.updateQueue = null; + current.firstEffect = null; + current.lastEffect = null; if (current.alternate) { - current.alternate.child = null; current.alternate.return = null; + current.alternate.child = null; + current.alternate.memoizedState = null; + current.alternate.updateQueue = null; + current.alternate.firstEffect = null; + current.alternate.lastEffect = null; } }