From bb8a09c4eb28c128e86973e4ccb840c7d8163aed Mon Sep 17 00:00:00 2001 From: just-boris Date: Sat, 6 Aug 2016 15:16:10 +0200 Subject: [PATCH] use Object.is for checking mutated children fixes #7424 --- package.json | 1 + packages/react/package.json | 3 ++- .../shared/hooks/ReactChildrenMutationWarningHook.js | 4 +++- .../stack/reconciler/__tests__/ReactComponent-test.js | 8 ++++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 85bc4a1101a54..bc1bbe8afc4b9 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "jest": "^12.1.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0", + "object-is": "^1.0.1", "platform": "^1.1.0", "run-sequence": "^1.1.4", "through2": "^2.0.0", diff --git a/packages/react/package.json b/packages/react/package.json index 0c7f04eed8dec..2b3310db084fb 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -25,7 +25,8 @@ "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", - "object-assign": "^4.1.0" + "object-assign": "^4.1.0", + "object-is": "^1.0.1" }, "browserify": { "transform": [ diff --git a/src/renderers/shared/hooks/ReactChildrenMutationWarningHook.js b/src/renderers/shared/hooks/ReactChildrenMutationWarningHook.js index fccc1538545ad..79d411b9758c3 100644 --- a/src/renderers/shared/hooks/ReactChildrenMutationWarningHook.js +++ b/src/renderers/shared/hooks/ReactChildrenMutationWarningHook.js @@ -13,6 +13,8 @@ var ReactComponentTreeHook = require('ReactComponentTreeHook'); +var is = require('object-is'); + var warning = require('warning'); var elements = {}; @@ -31,7 +33,7 @@ function handleElement(debugID, element) { if (Array.isArray(element._shadowChildren)) { if (element._shadowChildren.length === element.props.children.length) { for (var i = 0; i < element._shadowChildren.length; i++) { - if (element._shadowChildren[i] !== element.props.children[i]) { + if (!is(element._shadowChildren[i], element.props.children[i])) { isMutated = true; } } diff --git a/src/renderers/shared/stack/reconciler/__tests__/ReactComponent-test.js b/src/renderers/shared/stack/reconciler/__tests__/ReactComponent-test.js index b5ae5c58291fa..d82c93aa5c339 100644 --- a/src/renderers/shared/stack/reconciler/__tests__/ReactComponent-test.js +++ b/src/renderers/shared/stack/reconciler/__tests__/ReactComponent-test.js @@ -75,6 +75,14 @@ describe('ReactComponent', function() { ); }); + it('should not warn when children is NaN', function() { + spyOn(console, 'error'); + var children = [, NaN, ]; + var element =
{children}
; + ReactTestUtils.renderIntoDocument(element); + expect(console.error).not.toHaveBeenCalled(); + }); + it('should support refs on owned components', function() { var innerObj = {}; var outerObj = {};