Remove dependency to event system on the server (#10173)

I do this by splitting ReactDOMInjection into generic and client-only injection.
This commit is contained in:
Dan Abramov
2017-07-13 19:32:27 +01:00
committed by GitHub
parent 309412d8b6
commit 7dd7c1702b
5 changed files with 93 additions and 60 deletions
+27 -27
View File
@@ -25,28 +25,28 @@
"gzip": 7214
},
"react-dom.development.js (UMD_DEV)": {
"size": 623332,
"gzip": 142653
"size": 623782,
"gzip": 142020
},
"react-dom.production.min.js (UMD_PROD)": {
"size": 126056,
"size": 126115,
"gzip": 39910
},
"react-dom.development.js (NODE_DEV)": {
"size": 581993,
"gzip": 132990
"size": 582443,
"gzip": 132535
},
"react-dom.production.min.js (NODE_PROD)": {
"size": 122421,
"gzip": 38581
"size": 122480,
"gzip": 38633
},
"ReactDOMFiber-dev.js (FB_DEV)": {
"size": 581277,
"gzip": 133016
"size": 581728,
"gzip": 132560
},
"ReactDOMFiber-prod.js (FB_PROD)": {
"size": 427011,
"gzip": 96971
"size": 427202,
"gzip": 96685
},
"react-dom-test-utils.development.js (NODE_DEV)": {
"size": 53430,
@@ -65,20 +65,20 @@
"gzip": 81957
},
"react-dom-server.development.js (UMD_DEV)": {
"size": 308607,
"gzip": 77369
"size": 157366,
"gzip": 39194
},
"react-dom-server.production.min.js (UMD_PROD)": {
"size": 65509,
"gzip": 22270
"size": 26047,
"gzip": 9845
},
"react-dom-server.development.js (NODE_DEV)": {
"size": 267453,
"gzip": 67912
"size": 124505,
"gzip": 31491
},
"react-dom-server.production.min.js (NODE_PROD)": {
"size": 61847,
"gzip": 20971
"size": 23614,
"gzip": 8897
},
"ReactDOMServerStream-dev.js (FB_DEV)": {
"size": 264750,
@@ -181,20 +181,20 @@
"gzip": 50920
},
"ReactDOMServer-dev.js (FB_DEV)": {
"size": 266904,
"gzip": 67836
"size": 123959,
"gzip": 31418
},
"ReactDOMServer-prod.js (FB_PROD)": {
"size": 197089,
"gzip": 50856
"size": 65096,
"gzip": 17753
},
"react-dom-node-stream.development.js (NODE_DEV)": {
"size": 269147,
"gzip": 68409
"size": 126199,
"gzip": 31993
},
"react-dom-node-stream.production.min.js (NODE_PROD)": {
"size": 62784,
"gzip": 21287
"size": 24554,
"gzip": 9231
},
"ReactDOMNodeStream-dev.js (FB_DEV)": {
"size": 264918,
+2
View File
@@ -15,6 +15,7 @@
var ReactDOMComponentTree = require('ReactDOMComponentTree');
var ReactDOMInjection = require('ReactDOMInjection');
var ReactDOMClientInjection = require('ReactDOMClientInjection');
var ReactDOMStackInjection = require('ReactDOMStackInjection');
var ReactGenericBatching = require('ReactGenericBatching');
var ReactMount = require('ReactMount');
@@ -27,6 +28,7 @@ var getHostComponentFromComposite = require('getHostComponentFromComposite');
var warning = require('fbjs/lib/warning');
ReactDOMInjection.inject();
ReactDOMClientInjection.inject();
ReactDOMStackInjection.inject();
var ReactDOMStack = {
@@ -22,6 +22,7 @@ var ReactFeatureFlags = require('ReactFeatureFlags');
var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags');
var ReactDOMFiberComponent = require('ReactDOMFiberComponent');
var ReactDOMFrameScheduling = require('ReactDOMFrameScheduling');
var ReactDOMClientInjection = require('ReactDOMClientInjection');
var ReactDOMInjection = require('ReactDOMInjection');
var ReactGenericBatching = require('ReactGenericBatching');
var ReactFiberReconciler = require('ReactFiberReconciler');
@@ -64,6 +65,7 @@ if (__DEV__) {
var {updatedAncestorInfo} = validateDOMNesting;
}
ReactDOMClientInjection.inject();
ReactDOMInjection.inject();
ReactControlledComponent.injection.injectFiberControlledHostComponent(
ReactDOMFiberComponent,
@@ -0,0 +1,62 @@
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule ReactDOMClientInjection
*/
'use strict';
var BeforeInputEventPlugin = require('BeforeInputEventPlugin');
var ChangeEventPlugin = require('ChangeEventPlugin');
var DOMEventPluginOrder = require('DOMEventPluginOrder');
var EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');
var EventPluginHub = require('EventPluginHub');
var EventPluginUtils = require('EventPluginUtils');
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
var ReactDOMComponentTree = require('ReactDOMComponentTree');
var ReactDOMEventListener = require('ReactDOMEventListener');
var SelectEventPlugin = require('SelectEventPlugin');
var SimpleEventPlugin = require('SimpleEventPlugin');
var alreadyInjected = false;
function inject() {
if (alreadyInjected) {
// TODO: This is currently true because these injections are shared between
// the client and the server package. They should be built independently
// and not share any injection state. Then this problem will be solved.
return;
}
alreadyInjected = true;
ReactDOMEventListener.setHandleTopLevel(
ReactBrowserEventEmitter.handleTopLevel,
);
/**
* Inject modules for resolving DOM hierarchy and plugin ordering.
*/
EventPluginHub.injection.injectEventPluginOrder(DOMEventPluginOrder);
EventPluginUtils.injection.injectComponentTree(ReactDOMComponentTree);
/**
* Some important event plugins included by default (without having to require
* them).
*/
EventPluginHub.injection.injectEventPluginsByName({
SimpleEventPlugin: SimpleEventPlugin,
EnterLeaveEventPlugin: EnterLeaveEventPlugin,
ChangeEventPlugin: ChangeEventPlugin,
SelectEventPlugin: SelectEventPlugin,
BeforeInputEventPlugin: BeforeInputEventPlugin,
});
}
module.exports = {
inject: inject,
};
@@ -12,20 +12,9 @@
'use strict';
var ARIADOMPropertyConfig = require('ARIADOMPropertyConfig');
var BeforeInputEventPlugin = require('BeforeInputEventPlugin');
var DOMProperty = require('DOMProperty');
var ChangeEventPlugin = require('ChangeEventPlugin');
var DOMEventPluginOrder = require('DOMEventPluginOrder');
var EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');
var EventPluginHub = require('EventPluginHub');
var EventPluginUtils = require('EventPluginUtils');
var HTMLDOMPropertyConfig = require('HTMLDOMPropertyConfig');
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
var ReactDOMComponentTree = require('ReactDOMComponentTree');
var ReactDOMEventListener = require('ReactDOMEventListener');
var SVGDOMPropertyConfig = require('SVGDOMPropertyConfig');
var SelectEventPlugin = require('SelectEventPlugin');
var SimpleEventPlugin = require('SimpleEventPlugin');
var alreadyInjected = false;
@@ -38,28 +27,6 @@ function inject() {
}
alreadyInjected = true;
ReactDOMEventListener.setHandleTopLevel(
ReactBrowserEventEmitter.handleTopLevel,
);
/**
* Inject modules for resolving DOM hierarchy and plugin ordering.
*/
EventPluginHub.injection.injectEventPluginOrder(DOMEventPluginOrder);
EventPluginUtils.injection.injectComponentTree(ReactDOMComponentTree);
/**
* Some important event plugins included by default (without having to require
* them).
*/
EventPluginHub.injection.injectEventPluginsByName({
SimpleEventPlugin: SimpleEventPlugin,
EnterLeaveEventPlugin: EnterLeaveEventPlugin,
ChangeEventPlugin: ChangeEventPlugin,
SelectEventPlugin: SelectEventPlugin,
BeforeInputEventPlugin: BeforeInputEventPlugin,
});
DOMProperty.injection.injectDOMPropertyConfig(ARIADOMPropertyConfig);
DOMProperty.injection.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
DOMProperty.injection.injectDOMPropertyConfig(SVGDOMPropertyConfig);