From 1dca72ebfa97030292aed360a30cf59ef8c4c065 Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Wed, 30 Sep 2015 14:42:46 -0700 Subject: [PATCH] Thread native-parent pointers through everything Now we don't repurpose context for our own secret needs (hi Dan). In this diff I avoid storing the native parent on native (DOM) components and store it only on composites, but we'll probably want to store it on native components too soon for event bubbling. --- src/renderers/dom/client/ReactMount.js | 32 ++------ .../dom/client/validateDOMNesting.js | 3 - .../dom/client/wrappers/ReactDOMButton.js | 2 +- .../dom/client/wrappers/ReactDOMInput.js | 2 +- .../dom/client/wrappers/ReactDOMOption.js | 15 ++-- .../dom/client/wrappers/ReactDOMSelect.js | 19 ++--- .../dom/client/wrappers/ReactDOMTextarea.js | 2 +- .../dom/server/ReactServerRendering.js | 9 ++- src/renderers/dom/shared/ReactDOMComponent.js | 81 ++++++++----------- .../dom/shared/ReactDOMContainerInfo.js | 30 +++++++ .../dom/shared/ReactDOMTextComponent.js | 26 ++++-- .../reconciler/ReactCompositeComponent.js | 16 +++- .../shared/reconciler/ReactEmptyComponent.js | 10 ++- .../shared/reconciler/ReactMultiChild.js | 4 + .../shared/reconciler/ReactReconciler.js | 19 ++++- src/test/ReactTestUtils.js | 2 +- 16 files changed, 159 insertions(+), 113 deletions(-) create mode 100644 src/renderers/dom/shared/ReactDOMContainerInfo.js diff --git a/src/renderers/dom/client/ReactMount.js b/src/renderers/dom/client/ReactMount.js index 8ab20475fe..676f486e74 100644 --- a/src/renderers/dom/client/ReactMount.js +++ b/src/renderers/dom/client/ReactMount.js @@ -15,7 +15,7 @@ var ClientReactRootIndex = require('ClientReactRootIndex'); var DOMProperty = require('DOMProperty'); var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter'); var ReactCurrentOwner = require('ReactCurrentOwner'); -var ReactDOMFeatureFlags = require('ReactDOMFeatureFlags'); +var ReactDOMContainerInfo = require('ReactDOMContainerInfo'); var ReactElement = require('ReactElement'); var ReactEmptyComponentRegistry = require('ReactEmptyComponentRegistry'); var ReactInstanceHandles = require('ReactInstanceHandles'); @@ -26,14 +26,12 @@ var ReactReconciler = require('ReactReconciler'); var ReactUpdateQueue = require('ReactUpdateQueue'); var ReactUpdates = require('ReactUpdates'); -var assign = require('Object.assign'); var emptyObject = require('emptyObject'); var containsNode = require('containsNode'); var instantiateReactComponent = require('instantiateReactComponent'); var invariant = require('invariant'); var setInnerHTML = require('setInnerHTML'); var shouldUpdateReactComponent = require('shouldUpdateReactComponent'); -var validateDOMNesting = require('validateDOMNesting'); var warning = require('warning'); var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME; @@ -43,9 +41,6 @@ var ELEMENT_NODE_TYPE = 1; var DOC_NODE_TYPE = 9; var DOCUMENT_FRAGMENT_NODE_TYPE = 11; -var ownerDocumentContextKey = - '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2); - /** Mapping from reactRootID to React component instance. */ var instancesByReactRootID = {}; @@ -279,24 +274,13 @@ function mountComponentIntoNode( shouldReuseMarkup, context ) { - if (ReactDOMFeatureFlags.useCreateElement) { - context = assign({}, context); - if (container.nodeType === DOC_NODE_TYPE) { - context[ownerDocumentContextKey] = container; - } else { - context[ownerDocumentContextKey] = container.ownerDocument; - } - } - if (__DEV__) { - if (context === emptyObject) { - context = {}; - } - var tag = container.nodeName.toLowerCase(); - context[validateDOMNesting.ancestorInfoContextKey] = - validateDOMNesting.updatedAncestorInfo(null, tag, null); - } var markup = ReactReconciler.mountComponent( - componentInstance, rootID, transaction, context + componentInstance, + rootID, + transaction, + null, + ReactDOMContainerInfo(container), + context ); componentInstance._renderedComponent._topLevelWrapper = componentInstance; ReactMount._mountImageIntoNode( @@ -1081,8 +1065,6 @@ var ReactMount = { } }, - ownerDocumentContextKey: ownerDocumentContextKey, - /** * React ID utilities. */ diff --git a/src/renderers/dom/client/validateDOMNesting.js b/src/renderers/dom/client/validateDOMNesting.js index 7f6c49fa18..13e5be2212 100644 --- a/src/renderers/dom/client/validateDOMNesting.js +++ b/src/renderers/dom/client/validateDOMNesting.js @@ -412,9 +412,6 @@ if (__DEV__) { } }; - validateDOMNesting.ancestorInfoContextKey = - '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2); - validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo; // For testing diff --git a/src/renderers/dom/client/wrappers/ReactDOMButton.js b/src/renderers/dom/client/wrappers/ReactDOMButton.js index 857b995d26..d46cf370d5 100644 --- a/src/renderers/dom/client/wrappers/ReactDOMButton.js +++ b/src/renderers/dom/client/wrappers/ReactDOMButton.js @@ -30,7 +30,7 @@ var mouseListenerNames = { * when `disabled` is set. */ var ReactDOMButton = { - getNativeProps: function(inst, props, context) { + getNativeProps: function(inst, props) { if (!props.disabled) { return props; } diff --git a/src/renderers/dom/client/wrappers/ReactDOMInput.js b/src/renderers/dom/client/wrappers/ReactDOMInput.js index 5946fbd311..e309fd6191 100644 --- a/src/renderers/dom/client/wrappers/ReactDOMInput.js +++ b/src/renderers/dom/client/wrappers/ReactDOMInput.js @@ -49,7 +49,7 @@ function forceUpdateIfMounted() { * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html */ var ReactDOMInput = { - getNativeProps: function(inst, props, context) { + getNativeProps: function(inst, props) { var value = LinkedValueUtils.getValue(props); var checked = LinkedValueUtils.getChecked(props); diff --git a/src/renderers/dom/client/wrappers/ReactDOMOption.js b/src/renderers/dom/client/wrappers/ReactDOMOption.js index 8f2d92c481..2513710235 100644 --- a/src/renderers/dom/client/wrappers/ReactDOMOption.js +++ b/src/renderers/dom/client/wrappers/ReactDOMOption.js @@ -17,13 +17,11 @@ var ReactDOMSelect = require('ReactDOMSelect'); var assign = require('Object.assign'); var warning = require('warning'); -var valueContextKey = ReactDOMSelect.valueContextKey; - /** * Implements an