@samitouri / QOS-React-2 / commits / e3f95ea293

Hot fix cyclic dependency

We accidentally created an unfortunate cyclic dependency because of the auto-wrapper hack that uses ReactClass. Making it injected instead.

Sebastian Markbage committed Feb 2, 2015 at 23:55 UTC e3f95ea2936f06bb5986920c7f896f5c74d1a015
3 files changed +28 -20
src/browser/ui/ReactDefaultInjection.js
+22
@@ -20,6 +20,7 @@ var ExecutionEnvironment = require('ExecutionEnvironment');
20 var HTMLDOMPropertyConfig = require('HTMLDOMPropertyConfig');
21 var MobileSafariClickEventPlugin = require('MobileSafariClickEventPlugin');
22 var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
23 +var ReactClass = require('ReactClass');
24 var ReactComponentBrowserEnvironment =
25 require('ReactComponentBrowserEnvironment');
26 var ReactDefaultBatchingStrategy = require('ReactDefaultBatchingStrategy');
@@ -33,6 +34,7 @@ var ReactDOMOption = require('ReactDOMOption');
34 var ReactDOMSelect = require('ReactDOMSelect');
35 var ReactDOMTextarea = require('ReactDOMTextarea');
36 var ReactDOMTextComponent = require('ReactDOMTextComponent');
37 +var ReactElement = require('ReactElement');
38 var ReactEventListener = require('ReactEventListener');
39 var ReactInjection = require('ReactInjection');
40 var ReactInstanceHandles = require('ReactInstanceHandles');
@@ -45,6 +47,22 @@ var SVGDOMPropertyConfig = require('SVGDOMPropertyConfig');
47
48 var createFullPageComponent = require('createFullPageComponent');
49
50 +function autoGenerateWrapperClass(type) {
51 + return ReactClass.createClass({
52 + tagName: type.toUpperCase(),
53 + render: function() {
54 + return new ReactElement(
55 + type,
56 + null,
57 + null,
58 + null,
59 + null,
60 + this.props
61 + );
62 + }
63 + });
64 +}
65 +
66 function inject() {
67 ReactInjection.EventEmitter.injectReactEventListener(
68 ReactEventListener
@@ -78,6 +96,10 @@ function inject() {
96 ReactDOMTextComponent
97 );
98
99 + ReactInjection.NativeComponent.injectAutoWrapper(
100 + autoGenerateWrapperClass
101 + );
102 +
103 // This needs to happen before createFullPageComponent() otherwise the mixin
104 // won't be included.
105 ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);
src/core/ReactNativeComponent.js
+6 -19
@@ -11,12 +11,10 @@
11
12 'use strict';
13
14 -var ReactClass = require('ReactClass');
15 -var ReactElement = require('ReactElement');
16 -
14 var assign = require('Object.assign');
15 var invariant = require('invariant');
16
17 +var autoGenerateWrapperClass = null;
18 var genericComponentClass = null;
19 // This registry keeps track of wrapper classes around native tags
20 var tagToComponentClass = {};
@@ -37,25 +35,14 @@ var ReactNativeComponentInjection = {
35 // tag. That particular tag will use this class instead of the generic one.
36 injectComponentClasses: function(componentClasses) {
37 assign(tagToComponentClass, componentClasses);
38 + },
39 + // Temporary hack since we expect DOM refs to behave like composites,
40 + // for this release.
41 + injectAutoWrapper: function(wrapperFactory) {
42 + autoGenerateWrapperClass = wrapperFactory;
43 }
44 };
45
43 -function autoGenerateWrapperClass(type) {
44 - return ReactClass.createClass({
45 - tagName: type.toUpperCase(),
46 - render: function() {
47 - return new ReactElement(
48 - type,
49 - null,
50 - null,
51 - null,
52 - null,
53 - this.props
54 - );
55 - }
56 - });
57 -}
58 -
46 /**
47 * Get a composite component wrapper class for a specific tag.
48 *
src/core/ReactRef.js
-1
@@ -12,7 +12,6 @@
12 'use strict';
13
14 var ReactOwner = require('ReactOwner');
15 -var ReactUpdates = require('ReactUpdates');
15
16 var ReactRef = {};
17