From 8c7d7433613a8851580c9f9bf70f5f4a5ccabda9 Mon Sep 17 00:00:00 2001 From: "krystian.karczewski" Date: Tue, 2 Feb 2016 11:51:31 +0100 Subject: [PATCH 1/2] Fix for #5957: Bug on resolving default props (HTMLAllCollection) --- src/isomorphic/classic/element/ReactElement.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/isomorphic/classic/element/ReactElement.js b/src/isomorphic/classic/element/ReactElement.js index 44aa50f7d2..024e3b29e3 100644 --- a/src/isomorphic/classic/element/ReactElement.js +++ b/src/isomorphic/classic/element/ReactElement.js @@ -153,7 +153,7 @@ ReactElement.createElement = function(type, config, children) { if (type && type.defaultProps) { var defaultProps = type.defaultProps; for (propName in defaultProps) { - if (typeof props[propName] === 'undefined') { + if (props[propName] === undefined) { props[propName] = defaultProps[propName]; } } From ef2b1f26efb61ab18eac6919c3e55c46bfa3d385 Mon Sep 17 00:00:00 2001 From: karczk Date: Tue, 2 Feb 2016 19:35:58 +0100 Subject: [PATCH 2/2] Unnecessary type comparisons have been changed to value comparison --- src/addons/link/ReactLink.js | 2 +- src/isomorphic/classic/class/ReactClass.js | 2 +- src/renderers/dom/client/ReactDOMSelection.js | 4 ++-- src/renderers/dom/client/ReactInputSelection.js | 2 +- src/renderers/shared/reconciler/ReactCompositeComponent.js | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/addons/link/ReactLink.js b/src/addons/link/ReactLink.js index 70bcf61004..ea6435c92b 100644 --- a/src/addons/link/ReactLink.js +++ b/src/addons/link/ReactLink.js @@ -55,7 +55,7 @@ function ReactLink(value, requestChange) { */ function createLinkTypeChecker(linkType) { var shapes = { - value: typeof linkType === 'undefined' ? + value: linkType === undefined ? React.PropTypes.any.isRequired : linkType.isRequired, requestChange: React.PropTypes.func.isRequired, diff --git a/src/isomorphic/classic/class/ReactClass.js b/src/isomorphic/classic/class/ReactClass.js index ea049acafc..223e58bf63 100644 --- a/src/isomorphic/classic/class/ReactClass.js +++ b/src/isomorphic/classic/class/ReactClass.js @@ -777,7 +777,7 @@ var ReactClass = { var initialState = this.getInitialState ? this.getInitialState() : null; if (__DEV__) { // We allow auto-mocks to proceed as if they're returning null. - if (typeof initialState === 'undefined' && + if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. diff --git a/src/renderers/dom/client/ReactDOMSelection.js b/src/renderers/dom/client/ReactDOMSelection.js index 824fa210f9..aff9e894bb 100644 --- a/src/renderers/dom/client/ReactDOMSelection.js +++ b/src/renderers/dom/client/ReactDOMSelection.js @@ -138,7 +138,7 @@ function setIEOffsets(node, offsets) { var range = document.selection.createRange().duplicate(); var start, end; - if (typeof offsets.end === 'undefined') { + if (offsets.end === undefined) { start = offsets.start; end = start; } else if (offsets.start > offsets.end) { @@ -176,7 +176,7 @@ function setModernOffsets(node, offsets) { var selection = window.getSelection(); var length = node[getTextContentAccessor()].length; var start = Math.min(offsets.start, length); - var end = typeof offsets.end === 'undefined' ? + var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method. diff --git a/src/renderers/dom/client/ReactInputSelection.js b/src/renderers/dom/client/ReactInputSelection.js index e620246ab6..46e6931a6d 100644 --- a/src/renderers/dom/client/ReactInputSelection.js +++ b/src/renderers/dom/client/ReactInputSelection.js @@ -114,7 +114,7 @@ var ReactInputSelection = { setSelection: function(input, offsets) { var start = offsets.start; var end = offsets.end; - if (typeof end === 'undefined') { + if (end === undefined) { end = start; } diff --git a/src/renderers/shared/reconciler/ReactCompositeComponent.js b/src/renderers/shared/reconciler/ReactCompositeComponent.js index f453538916..3efdf37054 100644 --- a/src/renderers/shared/reconciler/ReactCompositeComponent.js +++ b/src/renderers/shared/reconciler/ReactCompositeComponent.js @@ -188,7 +188,7 @@ var ReactCompositeComponentMixin = { Component.displayName || Component.name || 'Component'; warning( - typeof inst.props === 'undefined' || !propsMutated, + inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\'s constructor was passed.', componentName, componentName @@ -673,7 +673,7 @@ var ReactCompositeComponentMixin = { if (__DEV__) { warning( - typeof shouldUpdate !== 'undefined', + shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent' @@ -839,7 +839,7 @@ var ReactCompositeComponentMixin = { var renderedComponent = inst.render(); if (__DEV__) { // We allow auto-mocks to proceed as if they're returning null. - if (typeof renderedComponent === 'undefined' && + if (renderedComponent === undefined && inst.render._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience.