[Flare] Remove responder flags to simplify logic (#16084)
Dominic Gannaway committed
Jul 9, 2019 at 15:05 UTC
23b8a25345fe2e1b04eac4eaa801b24aba62f3e1
12 files changed
+13
-183
packages/react-dom/src/events/__tests__/DOMEventResponderSystem-test.internal.js
-131
@@ -26,8 +26,6 @@ function createReactEventComponent({
26
onMount,
27
onUnmount,
28
onOwnershipChange,
29
- allowMultipleHostChildren,
30
- allowEventHooks,
29
}) {
30
const testEventResponder = {
31
displayName: 'TestEventComponent',
@@ -39,8 +37,6 @@ function createReactEventComponent({
37
onMount,
38
onUnmount,
39
onOwnershipChange,
42
- allowMultipleHostChildren: allowMultipleHostChildren || false,
43
- allowEventHooks: allowEventHooks || true,
40
};
41
42
return React.unstable_createEvent(testEventResponder);
@@ -822,133 +818,6 @@ describe('DOMEventResponderSystem', () => {
818
expect(container.innerHTML).toBe('<button>Click me!</button>');
819
});
820
825
- it('should warn if multiple host components are detected without allowMultipleHostChildren', () => {
826
- const EventComponent = createReactEventComponent({
827
- targetEventTypes: [],
828
- onEvent: () => {},
829
- allowMultipleHostChildren: false,
830
- });
831
-
832
- const Test = () => (
833
- <EventComponent>
834
- <div />
835
- <div />
836
- </EventComponent>
837
- );
838
-
839
- expect(() => {
840
- ReactDOM.render(<Test />, container);
841
- }).toWarnDev(
842
- 'Warning: A "<TestEventComponent>" event component cannot contain multiple host children.',
843
- );
844
-
845
- function Component() {
846
- return <div />;
847
- }
848
-
849
- const Test2 = () => (
850
- <EventComponent>
851
- <div />
852
- <Component />
853
- </EventComponent>
854
- );
855
-
856
- expect(() => {
857
- ReactDOM.render(<Test2 />, container);
858
- }).toWarnDev(
859
- 'Warning: A "<TestEventComponent>" event component cannot contain multiple host children.',
860
- );
861
- });
862
-
863
- it('should handle suspended nodes correctly when detecting host components without allowMultipleHostChildren', () => {
864
- const EventComponent = createReactEventComponent({
865
- targetEventTypes: [],
866
- onEvent: () => {},
867
- allowMultipleHostChildren: false,
868
- });
869
-
870
- function SuspendedComponent() {
871
- throw Promise.resolve();
872
- }
873
-
874
- function Component() {
875
- return (
876
- <React.Fragment>
877
- <div />
878
- <SuspendedComponent />
879
- </React.Fragment>
880
- );
881
- }
882
-
883
- const Test = () => (
884
- <EventComponent>
885
- <React.Suspense fallback={<div>Loading...</div>}>
886
- <Component />
887
- </React.Suspense>
888
- </EventComponent>
889
- );
890
-
891
- ReactDOM.render(<Test />, container);
892
-
893
- function Component2() {
894
- return (
895
- <React.Fragment>
896
- <SuspendedComponent />
897
- </React.Fragment>
898
- );
899
- }
900
-
901
- const Test2 = () => (
902
- <EventComponent>
903
- <React.Suspense
904
- fallback={
905
- <React.Fragment>
906
- <div />
907
- <div />
908
- </React.Fragment>
909
- }>
910
- <Component2 />
911
- </React.Suspense>
912
- </EventComponent>
913
- );
914
-
915
- expect(() => {
916
- ReactDOM.render(<Test2 />, container);
917
- }).toWarnDev(
918
- 'Warning: A "<TestEventComponent>" event component cannot contain multiple host children.',
919
- );
920
- });
921
-
922
- it('should not warn if multiple host components are detected with allowMultipleHostChildren', () => {
923
- const EventComponent = createReactEventComponent({
924
- targetEventTypes: [],
925
- onEvent: () => {},
926
- allowMultipleHostChildren: true,
927
- });
928
-
929
- const Test = () => (
930
- <EventComponent>
931
- <div />
932
- <div />
933
- </EventComponent>
934
- );
935
-
936
- ReactDOM.render(<Test />, container);
937
-
938
- function Component() {
939
- return <div />;
940
- }
941
-
942
- const Test2 = () => (
943
- <EventComponent>
944
- <div />
945
- <Component />
946
- </EventComponent>
947
- );
948
-
949
- ReactDOM.render(<Test2 />, container);
950
- });
951
-
821
it('should work with event component hooks', () => {
822
const buttonRef = React.createRef();
823
const eventLogs = [];
packages/react-events/src/dom/Drag.js
-2
@@ -98,8 +98,6 @@ const DragResponder: ReactDOMEventResponder = {
98
y: 0,
99
};
100
},
101
- allowMultipleHostChildren: false,
102
- allowEventHooks: false,
101
onEvent(
102
event: ReactDOMResponderEvent,
103
context: ReactDOMResponderContext,
packages/react-events/src/dom/Focus.js
-2
@@ -228,8 +228,6 @@ const FocusResponder: ReactDOMEventResponder = {
228
pointerType: '',
229
};
230
},
231
- allowMultipleHostChildren: false,
232
- allowEventHooks: true,
231
onEvent(
232
event: ReactDOMResponderEvent,
233
context: ReactDOMResponderContext,
packages/react-events/src/dom/FocusScope.js
-2
@@ -56,8 +56,6 @@ const FocusScopeResponder: ReactDOMEventResponder = {
56
currentFocusedNode: null,
57
};
58
},
59
- allowMultipleHostChildren: true,
60
- allowEventHooks: false,
59
onEvent(
60
event: ReactDOMResponderEvent,
61
context: ReactDOMResponderContext,
packages/react-events/src/dom/Hover.js
+12
-14
@@ -332,20 +332,18 @@ const HoverResponder: ReactDOMEventResponder = {
332
case 'pointermove':
333
case 'mousemove': {
334
if (state.isHovered && !isEmulatedMouseEvent(event, state)) {
335
- if (state.isHovered) {
336
- if (props.onHoverMove && state.hoverTarget !== null) {
337
- const syntheticEvent = createHoverEvent(
338
- event,
339
- context,
340
- 'hovermove',
341
- state.hoverTarget,
342
- );
343
- context.dispatchEvent(
344
- syntheticEvent,
345
- props.onHoverMove,
346
- UserBlockingEvent,
347
- );
348
- }
335
+ if (props.onHoverMove && state.hoverTarget !== null) {
336
+ const syntheticEvent = createHoverEvent(
337
+ event,
338
+ context,
339
+ 'hovermove',
340
+ state.hoverTarget,
341
+ );
342
+ context.dispatchEvent(
343
+ syntheticEvent,
344
+ props.onHoverMove,
345
+ UserBlockingEvent,
346
+ );
347
}
348
}
349
return;
packages/react-events/src/dom/Press.js
-2
@@ -649,8 +649,6 @@ const PressResponder: ReactDOMEventResponder = {
649
touchEvent: null,
650
};
651
},
652
- allowMultipleHostChildren: false,
653
- allowEventHooks: true,
652
onEvent(
653
event: ReactDOMResponderEvent,
654
context: ReactDOMResponderContext,
packages/react-events/src/dom/Scroll.js
-2
@@ -141,8 +141,6 @@ const ScrollResponder: ReactDOMEventResponder = {
141
scrollTarget: null,
142
};
143
},
144
- allowMultipleHostChildren: true,
145
- allowEventHooks: true,
144
onEvent(
145
event: ReactDOMResponderEvent,
146
context: ReactDOMResponderContext,
packages/react-events/src/dom/Swipe.js
-2
@@ -104,8 +104,6 @@ const SwipeResponder: ReactDOMEventResponder = {
104
y: 0,
105
};
106
},
107
- allowMultipleHostChildren: false,
108
- allowEventHooks: false,
107
onEvent(
108
event: ReactDOMResponderEvent,
109
context: ReactDOMResponderContext,
packages/react-events/src/rn/Press.js
-2
@@ -502,8 +502,6 @@ function dispatchPressEndEvents(event, context, props, state): void {
502
const PressResponder: ReactNativeEventResponder = {
503
displayName: 'Press',
504
targetEventTypes,
505
- allowEventHooks: true,
506
- allowMultipleHostChildren: false,
505
getInitialState(): PressState {
506
return {
507
activationPosition: null,
packages/react-reconciler/src/ReactFiberCompleteWork.js
+1
-16
@@ -116,12 +116,7 @@ import {
116
renderDidSuspendDelayIfPossible,
117
renderHasNotSuspendedYet,
118
} from './ReactFiberWorkLoop';
119
-import {
120
- getEventComponentHostChildrenCount,
121
- createEventComponentInstance,
122
-} from './ReactFiberEvents';
123
-import getComponentName from 'shared/getComponentName';
124
-import warning from 'shared/warning';
119
+import {createEventComponentInstance} from './ReactFiberEvents';
120
import {Never} from './ReactFiberExpirationTime';
121
import {resetChildFibers} from './ReactChildFiber';
122
@@ -1131,16 +1126,6 @@ function completeWork(
1126
1127
if (eventComponentInstance === null) {
1128
let responderState = null;
1134
- if (__DEV__ && !responder.allowMultipleHostChildren) {
1135
- const hostChildrenCount = getEventComponentHostChildrenCount(
1136
- workInProgress,
1137
- );
1138
- warning(
1139
- (hostChildrenCount || 0) < 2,
1140
- 'A "<%s>" event component cannot contain multiple host children.',
1141
- getComponentName(workInProgress.type),
1142
- );
1143
- }
1129
const getInitialState = responder.getInitialState;
1130
if (getInitialState !== undefined) {
1131
responderState = getInitialState(newProps);
packages/react-reconciler/src/ReactFiberEvents.js
-6
@@ -22,7 +22,6 @@ import {
22
Fragment,
23
} from 'shared/ReactWorkTags';
24
import {NoWork} from './ReactFiberExpirationTime';
25
-import invariant from 'shared/invariant';
25
26
let currentlyRenderingFiber: null | Fiber = null;
27
let currentEventComponentInstanceIndex: number = 0;
@@ -37,11 +36,6 @@ export function updateEventComponentInstance<E, C>(
36
props: Object,
37
): void {
38
const responder = eventComponent.responder;
40
- invariant(
41
- responder.allowEventHooks,
42
- 'The "%s" event responder cannot be used via the "useEvent" hook.',
43
- responder.displayName,
44
- );
39
let events;
40
let dependencies: Dependencies | null = ((currentlyRenderingFiber: any): Fiber)
41
.dependencies;
packages/shared/ReactTypes.js
-2
@@ -95,8 +95,6 @@ export type ReactEventResponder<E, C> = {
95
targetEventTypes?: Array<string>,
96
rootEventTypes?: Array<string>,
97
getInitialState?: (props: Object) => Object,
98
- allowMultipleHostChildren: boolean,
99
- allowEventHooks: boolean,
98
onEvent?: (event: E, context: C, props: Object, state: Object) => void,
99
onRootEvent?: (event: E, context: C, props: Object, state: Object) => void,
100
onMount?: (context: C, props: Object, state: Object) => void,