From f7f97a4830df058525c7cb9dfebcdf6f5b0c0972 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 25 May 2016 23:07:26 +0100 Subject: [PATCH] Make sure cloneElement() supports prototype-less config This brings createElement() fix from #6855 to cloneElement(). --- src/isomorphic/classic/element/ReactElement.js | 2 +- .../classic/element/__tests__/ReactElementClone-test.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/isomorphic/classic/element/ReactElement.js b/src/isomorphic/classic/element/ReactElement.js index b0a6648870de..64ac67125d38 100644 --- a/src/isomorphic/classic/element/ReactElement.js +++ b/src/isomorphic/classic/element/ReactElement.js @@ -311,7 +311,7 @@ ReactElement.cloneElement = function(element, config, children) { defaultProps = element.type.defaultProps; } for (propName in config) { - if (config.hasOwnProperty(propName) && + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { if (config[propName] === undefined && defaultProps !== undefined) { // Resolve default props diff --git a/src/isomorphic/classic/element/__tests__/ReactElementClone-test.js b/src/isomorphic/classic/element/__tests__/ReactElementClone-test.js index ab57c8cae2fe..1414bdce34f8 100644 --- a/src/isomorphic/classic/element/__tests__/ReactElementClone-test.js +++ b/src/isomorphic/classic/element/__tests__/ReactElementClone-test.js @@ -78,6 +78,11 @@ describe('ReactElementClone', function() { ); }); + it('does not fail if config has no prototype', function() { + var config = Object.create(null, {foo: {value: 1, enumerable: true}}); + React.cloneElement(
, config); + }); + it('should keep the original ref if it is not overridden', function() { var Grandparent = React.createClass({ render: function() {