Change:
See for a basic example. I'm assuming there's some step in the new SVG code that we just need to remove the key if we consume it as a React prop.
Going to leave this open to ensure we block even though wrote fix before I finished submitting (do you ever sleep Dan!?)
I sleep incrementally. FWIW the fix is in

Discussion:
// For quickly matching children type, to test if can be treated as content. var CONTENT_TYPES = {'string': true, 'number': true}; <del> var CHILDREN = keyOf({children: null}); </del> var STYLE = keyOf({style: null}); var HTML = keyOf({__html: null}); <ins> var RESERVED_PROPS = { children: null, dangerouslySetInnerHTML: null, suppressContentEditableWarning: null, }; </ins> function getDeclarationErrorAddendum(internalInstance) { if (internalInstance) {

} var markup = null; if (this._tag != null && isCustomComponent(this._tag, props)) { <del> if (propKey !== CHILDREN) { </del> <ins> if (!RESERVED_PROPS.hasOwnProperty(propKey)) { </ins> markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue); } } else if (this._namespaceURI === DOMNamespaces.svg) { <del> markup = DOMPropertyOperations.createMarkupForSVGAttribute(propKey, propValue); </del> <ins> if (!RESERVED_PROPS.hasOwnProperty(propKey)) { markup = DOMPropertyOperations.createMarkupForSVGAttribute(propKey, propValue); } </ins> } else { markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue); }

deleteListener(this, propKey); } } else if (isCustomComponent(this._tag, nextProps)) { <del> if (propKey === CHILDREN) { nextProp = null; </del> <ins> if (!RESERVED_PROPS.hasOwnProperty(propKey)) { DOMPropertyOperations.setValueForAttribute( getNode(this), propKey, nextProp ); </ins> } <del> DOMPropertyOperations.setValueForAttribute( getNode(this), propKey, nextProp ); </del> } else if (this._namespaceURI === DOMNamespaces.svg) { <del> DOMPropertyOperations.setValueForSVGAttribute( getNode(this), propKey, nextProp ); </del> <ins> if (!RESERVED_PROPS.hasOwnProperty(propKey)) { DOMPropertyOperations.setValueForSVGAttribute( getNode(this), propKey, nextProp ); } </ins> } else if ( DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {

expect(stubStyle.display).toEqual(''); }); <del> it('should skip child object attribute on web components', function() { </del> <ins> it('should skip reserved props on web components', function() { </ins> var container = document.createElement('div'); <del> // Test initial render to null ReactDOM.render(<my-component children={['foo']} />, container); </del> <ins> ReactDOM.render( <my-component children={['foo']} suppressContentEditableWarning={true} />, container ); </ins> expect(container.firstChild.hasAttribute('children')).toBe(false); <ins> expect( container.firstChild.hasAttribute('suppressContentEditableWarning') ).toBe(false); </ins> <del> // Test updates to null ReactDOM.render(<my-component children={['foo']} />, container); </del> <ins> ReactDOM.render( <my-component children={['bar']} suppressContentEditableWarning={false} />, container ); </ins> expect(container.firstChild.hasAttribute('children')).toBe(false); <ins> expect( container.firstChild.hasAttribute('suppressContentEditableWarning') ).toBe(false); }); it('should skip dangerouslySetInnerHTML on web components', function() { var container = document.createElement('div'); ReactDOM.render( <my-component dangerouslySetInnerHTML={{__html: 'hi'}} />, container ); expect( container.firstChild.hasAttribute('dangerouslySetInnerHTML') ).toBe(false); ReactDOM.render( <my-component dangerouslySetInnerHTML={{__html: 'bye'}} />, container ); expect( container.firstChild.hasAttribute('dangerouslySetInnerHTML') ).toBe(false); }); it('should skip reserved props on SVG components', function() { var container = document.createElement('div'); ReactDOM.render( <svg children={['foo']} suppressContentEditableWarning={true} />, container ); expect(container.firstChild.hasAttribute('children')).toBe(false); expect( container.firstChild.hasAttribute('suppressContentEditableWarning') ).toBe(false); ReactDOM.render( <svg children={['bar']} suppressContentEditableWarning={false} />, 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( <svg dangerouslySetInnerHTML={{__html: 'hi'}} />, container ); expect( container.firstChild.hasAttribute('dangerouslySetInnerHTML') ).toBe(false); ReactDOM.render( <svg dangerouslySetInnerHTML={{__html: 'bye'}} />, container ); expect( container.firstChild.hasAttribute('dangerouslySetInnerHTML') ).toBe(false); </ins> }); it('should remove attributes', function() {