diff --git a/src/renderers/dom/shared/ReactDOMComponent.js b/src/renderers/dom/shared/ReactDOMComponent.js
index 244d80b94f..f7bf1bb122 100644
--- a/src/renderers/dom/shared/ReactDOMComponent.js
+++ b/src/renderers/dom/shared/ReactDOMComponent.js
@@ -53,13 +53,9 @@ var registrationNameModules = EventPluginRegistry.registrationNameModules;
// For quickly matching children type, to test if can be treated as content.
var CONTENT_TYPES = {'string': true, 'number': true};
+var CHILDREN = keyOf({children: null});
var STYLE = keyOf({style: null});
var HTML = keyOf({__html: null});
-var RESERVED_PROPS = {
- children: null,
- dangerouslySetInnerHTML: null,
- suppressContentEditableWarning: null,
-};
function getDeclarationErrorAddendum(internalInstance) {
if (internalInstance) {
@@ -639,13 +635,11 @@ ReactDOMComponent.Mixin = {
}
var markup = null;
if (this._tag != null && isCustomComponent(this._tag, props)) {
- if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
+ if (propKey !== CHILDREN) {
markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);
}
} else if (this._namespaceURI === DOMNamespaces.svg) {
- if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
- markup = DOMPropertyOperations.createMarkupForSVGAttribute(propKey, propValue);
- }
+ markup = DOMPropertyOperations.createMarkupForSVGAttribute(propKey, propValue);
} else {
markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
}
@@ -920,21 +914,20 @@ ReactDOMComponent.Mixin = {
deleteListener(this, propKey);
}
} else if (isCustomComponent(this._tag, nextProps)) {
- if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
- DOMPropertyOperations.setValueForAttribute(
- getNode(this),
- propKey,
- nextProp
- );
+ if (propKey === CHILDREN) {
+ nextProp = null;
}
+ DOMPropertyOperations.setValueForAttribute(
+ getNode(this),
+ propKey,
+ nextProp
+ );
} else if (this._namespaceURI === DOMNamespaces.svg) {
- if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
- DOMPropertyOperations.setValueForSVGAttribute(
- getNode(this),
- propKey,
- nextProp
- );
- }
+ DOMPropertyOperations.setValueForSVGAttribute(
+ getNode(this),
+ propKey,
+ nextProp
+ );
} else if (
DOMProperty.properties[propKey] ||
DOMProperty.isCustomAttribute(propKey)) {
diff --git a/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js b/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
index 1e07d5a4c2..53e68defe5 100644
--- a/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
+++ b/src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
@@ -238,100 +238,16 @@ describe('ReactDOMComponent', function() {
expect(stubStyle.display).toEqual('');
});
- it('should skip reserved props on web components', function() {
+ it('should skip child object attribute on web components', function() {
var container = document.createElement('div');
- ReactDOM.render(
- ,
- container
- );
+ // Test initial render to null
+ ReactDOM.render(, container);
expect(container.firstChild.hasAttribute('children')).toBe(false);
- expect(
- container.firstChild.hasAttribute('suppressContentEditableWarning')
- ).toBe(false);
- ReactDOM.render(
- ,
- container
- );
+ // Test updates to null
+ ReactDOM.render(, container);
expect(container.firstChild.hasAttribute('children')).toBe(false);
- expect(
- container.firstChild.hasAttribute('suppressContentEditableWarning')
- ).toBe(false);
- });
-
- it('should skip dangerouslySetInnerHTML on web components', function() {
- var container = document.createElement('div');
-
- ReactDOM.render(
- ,
- container
- );
- expect(
- container.firstChild.hasAttribute('dangerouslySetInnerHTML')
- ).toBe(false);
-
- ReactDOM.render(
- ,
- container
- );
- expect(
- container.firstChild.hasAttribute('dangerouslySetInnerHTML')
- ).toBe(false);
- });
-
- it('should skip reserved props on SVG components', function() {
- var container = document.createElement('div');
-
- ReactDOM.render(
- ,
- container
- );
- expect(container.firstChild.hasAttribute('children')).toBe(false);
- expect(
- container.firstChild.hasAttribute('suppressContentEditableWarning')
- ).toBe(false);
-
- ReactDOM.render(
- ,
- container
- );
- expect(container.firstChild.hasAttribute('children')).toBe(false);
- expect(
- container.firstChild.hasAttribute('suppressContentEditableWarning')
- ).toBe(false);
- });
-
- it('should skip dangerouslySetInnerHTML on SVG components', function() {
- var container = document.createElement('div');
-
- ReactDOM.render(
- ,
- container
- );
- expect(
- container.firstChild.hasAttribute('dangerouslySetInnerHTML')
- ).toBe(false);
-
- ReactDOM.render(
- ,
- container
- );
- expect(
- container.firstChild.hasAttribute('dangerouslySetInnerHTML')
- ).toBe(false);
});
it('should remove attributes', function() {