diff --git a/packages/react-art/src/ReactARTHostConfig.js b/packages/react-art/src/ReactARTHostConfig.js index 459f714b90c..6afa063abf5 100644 --- a/packages/react-art/src/ReactARTHostConfig.js +++ b/packages/react-art/src/ReactARTHostConfig.js @@ -403,6 +403,12 @@ export function commitUpdate( instance._applyProps(instance, newProps, oldProps); } +export function commitUnmount( + domElement: Instance, +): void { + // Noop +} + export function hideInstance(instance) { instance.hide(); } diff --git a/packages/react-dom/src/client/ReactDOMComponentTree.js b/packages/react-dom/src/client/ReactDOMComponentTree.js index fbf0a81e290..f8bc8487149 100644 --- a/packages/react-dom/src/client/ReactDOMComponentTree.js +++ b/packages/react-dom/src/client/ReactDOMComponentTree.js @@ -183,6 +183,12 @@ export function getNodeFromInstance(inst: Fiber): Instance | TextInstance { invariant(false, 'getNodeFromInstance: Invalid argument.'); } +export function cleanupNode(node) { + node[internalInstanceKey] = null; + node[internalEventHandlersKey] = null; + node[internalContainerInstanceKey] = null; +} + export function getFiberCurrentPropsFromNode( node: Instance | TextInstance | SuspenseInstance, ): Props { diff --git a/packages/react-dom/src/client/ReactDOMHostConfig.js b/packages/react-dom/src/client/ReactDOMHostConfig.js index e5ce50add75..b97a28f5c56 100644 --- a/packages/react-dom/src/client/ReactDOMHostConfig.js +++ b/packages/react-dom/src/client/ReactDOMHostConfig.js @@ -25,6 +25,7 @@ import { getFiberFromScopeInstance, getInstanceFromNode as getInstanceFromNodeDOMTree, isContainerMarkedAsRoot, + cleanupNode, } from './ReactDOMComponentTree'; import {hasRole} from './DOMAccessibilityRoles'; import { @@ -428,6 +429,12 @@ export function commitUpdate( updateProperties(domElement, updatePayload, type, oldProps, newProps); } +export function commitUnmount( + domElement: Instance, +): void { + cleanupNode(domElement); +} + export function resetTextContent(domElement: Instance): void { setTextContent(domElement, ''); } diff --git a/packages/react-native-renderer/src/ReactNativeHostConfig.js b/packages/react-native-renderer/src/ReactNativeHostConfig.js index 0369755c136..e6e7db2498b 100644 --- a/packages/react-native-renderer/src/ReactNativeHostConfig.js +++ b/packages/react-native-renderer/src/ReactNativeHostConfig.js @@ -356,6 +356,12 @@ export function commitUpdate( } } +export function commitUnmount( + domElement: Instance, +): void { + // Noop +} + export function insertBefore( parentInstance: Instance, child: Instance | TextInstance, diff --git a/packages/react-reconciler/src/ReactFiberCommitWork.new.js b/packages/react-reconciler/src/ReactFiberCommitWork.new.js index 4e9acfae113..e98f3c89475 100644 --- a/packages/react-reconciler/src/ReactFiberCommitWork.new.js +++ b/packages/react-reconciler/src/ReactFiberCommitWork.new.js @@ -98,6 +98,7 @@ import { supportsHydration, commitMount, commitUpdate, + commitUnmount as commitHostUnmount, resetTextContent, commitTextUpdate, appendChild, @@ -1060,6 +1061,15 @@ function commitUnmount( } case HostComponent: { safelyDetachRef(current, nearestMountedAncestor); + if (commitHostUnmount) { + commitHostUnmount(current.stateNode); + } + return; + } + case HostText: { + if (commitHostUnmount) { + commitHostUnmount(current.stateNode); + } return; } case HostPortal: { diff --git a/packages/react-reconciler/src/ReactFiberCommitWork.old.js b/packages/react-reconciler/src/ReactFiberCommitWork.old.js index e094e5bd9b5..e8d7a3c0f97 100644 --- a/packages/react-reconciler/src/ReactFiberCommitWork.old.js +++ b/packages/react-reconciler/src/ReactFiberCommitWork.old.js @@ -87,6 +87,7 @@ import { supportsHydration, commitMount, commitUpdate, + commitUnmount as commitHostUnmount, resetTextContent, commitTextUpdate, appendChild, @@ -918,6 +919,15 @@ function commitUnmount( } case HostComponent: { safelyDetachRef(current); + if (commitHostUnmount) { + commitHostUnmount(current.stateNode); + } + return; + } + case HostText: { + if (commitHostUnmount) { + commitHostUnmount(current.stateNode); + } return; } case HostPortal: { diff --git a/packages/react-test-renderer/src/ReactTestHostConfig.js b/packages/react-test-renderer/src/ReactTestHostConfig.js index b244810736d..d2b4dd0092b 100644 --- a/packages/react-test-renderer/src/ReactTestHostConfig.js +++ b/packages/react-test-renderer/src/ReactTestHostConfig.js @@ -240,6 +240,12 @@ export function commitUpdate( instance.props = newProps; } +export function commitUnmount( + domElement: Instance, +): void { + // Noop +} + export function commitMount( instance: Instance, type: string,