Skip to content

Commit

Permalink
Remove usage of PossiblyWeakSet from createEventHandle (facebook#19686)
Browse files Browse the repository at this point in the history
  • Loading branch information
trueadm authored and koto committed Jun 15, 2021
1 parent 5ae9353 commit 0a79425
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 8 deletions.
28 changes: 27 additions & 1 deletion packages/react-dom/src/client/ReactDOMComponentTree.js
Expand Up @@ -9,7 +9,10 @@

import type {Fiber} from 'react-reconciler/src/ReactInternalTypes';
import type {ReactScopeInstance} from 'shared/ReactTypes';
import type {ReactDOMEventHandleListener} from '../shared/ReactDOMTypes';
import type {
ReactDOMEventHandle,
ReactDOMEventHandleListener,
} from '../shared/ReactDOMTypes';
import type {
Container,
TextInstance,
Expand Down Expand Up @@ -39,6 +42,7 @@ const internalPropsKey = '__reactProps$' + randomKey;
const internalContainerInstanceKey = '__reactContainer$' + randomKey;
const internalEventHandlersKey = '__reactEvents$' + randomKey;
const internalEventHandlerListenersKey = '__reactListeners$' + randomKey;
const internalEventHandlesSetKey = '__reactHandles$' + randomKey;

export type ElementListenerMap = Map<
DOMEventName | string,
Expand Down Expand Up @@ -232,3 +236,25 @@ export function getEventHandlerListeners(
): null | Set<ReactDOMEventHandleListener> {
return (scope: any)[internalEventHandlerListenersKey] || null;
}

export function addEventHandleToTarget(
target: EventTarget | ReactScopeInstance,
eventHandle: ReactDOMEventHandle,
): void {
let eventHandles = (target: any)[internalEventHandlesSetKey];
if (eventHandles === undefined) {
eventHandles = (target: any)[internalEventHandlesSetKey] = new Set();
}
eventHandles.add(eventHandle);
}

export function doesTargetHaveEventHandle(
target: EventTarget | ReactScopeInstance,
eventHandle: ReactDOMEventHandle,
): boolean {
const eventHandles = (target: any)[internalEventHandlesSetKey];
if (eventHandles === undefined) {
return false;
}
return eventHandles.has(eventHandle);
}
14 changes: 7 additions & 7 deletions packages/react-dom/src/client/ReactDOMEventHandle.js
Expand Up @@ -20,6 +20,8 @@ import {
getEventHandlerListeners,
setEventHandlerListeners,
getFiberFromScopeInstance,
doesTargetHaveEventHandle,
addEventHandleToTarget,
} from './ReactDOMComponentTree';
import {ELEMENT_NODE, COMMENT_NODE} from '../shared/HTMLNodeType';
import {
Expand All @@ -42,8 +44,6 @@ type EventHandleOptions = {|
priority?: EventPriority,
|};

const PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;

function getNearestRootOrPortalContainer(node: Fiber): null | Element {
while (node !== null) {
const tag = node.tag;
Expand Down Expand Up @@ -201,9 +201,7 @@ export function createEventHandle(
listenerPriority = getEventPriorityForListenerSystem(domEventName);
}

const registeredReactDOMEvents = new PossiblyWeakSet();

return (
const eventHandle = (
target: EventTarget | ReactScopeInstance,
callback: (SyntheticEvent<EventTarget>) => void,
) => {
Expand All @@ -212,8 +210,8 @@ export function createEventHandle(
'ReactDOM.createEventHandle: setter called with an invalid ' +
'callback. The callback must be a function.',
);
if (!registeredReactDOMEvents.has(target)) {
registeredReactDOMEvents.add(target);
if (!doesTargetHaveEventHandle(target, eventHandle)) {
addEventHandleToTarget(target, eventHandle);
registerReactDOMEvent(
target,
domEventName,
Expand Down Expand Up @@ -241,6 +239,8 @@ export function createEventHandle(
);
};
};

return eventHandle;
}
return (null: any);
}

0 comments on commit 0a79425

Please sign in to comment.