react 0.10.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/JSXTransformer.js +20344 -0
- package/dist/react-with-addons.js +20276 -0
- package/dist/react-with-addons.min.js +22 -0
- package/dist/react.js +18484 -0
- package/dist/react.min.js +21 -0
- package/lib/BeforeInputEventPlugin.js +222 -0
- package/lib/CSSPropertyOperations.js +3 -3
- package/lib/{ReactMountReady.js → CallbackQueue.js} +32 -24
- package/lib/ChangeEventPlugin.js +1 -1
- package/lib/CompositionEventPlugin.js +5 -1
- package/lib/DOMChildrenOperations.js +21 -14
- package/lib/DOMProperty.js +45 -17
- package/lib/DOMPropertyOperations.js +22 -10
- package/lib/DefaultEventPluginOrder.js +1 -0
- package/lib/EventConstants.js +1 -0
- package/lib/EventListener.js +5 -2
- package/lib/EventPluginHub.js +0 -5
- package/lib/EventPluginRegistry.js +6 -4
- package/lib/EventPluginUtils.js +11 -1
- package/lib/ExecutionEnvironment.js +8 -2
- package/lib/{DefaultDOMPropertyConfig.js → HTMLDOMPropertyConfig.js} +42 -49
- package/lib/LinkedValueUtils.js +21 -22
- package/lib/LocalEventTrapMixin.js +52 -0
- package/lib/React.js +57 -3
- package/lib/ReactBrowserComponentMixin.js +4 -0
- package/lib/{ReactEventEmitter.js → ReactBrowserEventEmitter.js} +115 -94
- package/lib/ReactCSSTransitionGroup.js +2 -0
- package/lib/ReactCSSTransitionGroupChild.js +2 -5
- package/lib/ReactChildren.js +31 -10
- package/lib/ReactComponent.js +88 -237
- package/lib/ReactComponentBrowserEnvironment.js +3 -2
- package/lib/ReactComponentWithPureRenderMixin.js +54 -0
- package/lib/ReactCompositeComponent.js +222 -384
- package/lib/ReactDOM.js +22 -18
- package/lib/ReactDOMComponent.js +26 -24
- package/lib/ReactDOMForm.js +5 -13
- package/lib/ReactDOMIDOperations.js +2 -31
- package/lib/ReactDOMImg.js +5 -14
- package/lib/ReactDOMSelect.js +16 -15
- package/lib/ReactDOMSelection.js +35 -10
- package/lib/ReactDOMTextarea.js +2 -4
- package/lib/ReactDefaultBatchingStrategy.js +3 -3
- package/lib/ReactDefaultInjection.js +18 -15
- package/lib/ReactDefaultPerf.js +28 -11
- package/lib/ReactDefaultPerfAnalysis.js +4 -0
- package/lib/ReactDescriptor.js +251 -0
- package/lib/ReactDescriptorValidator.js +283 -0
- package/lib/ReactEmptyComponent.js +78 -0
- package/lib/ReactEventEmitterMixin.js +1 -3
- package/lib/ReactEventListener.js +189 -0
- package/lib/ReactInjection.js +4 -2
- package/lib/ReactLink.js +24 -0
- package/lib/ReactMount.js +51 -19
- package/lib/ReactMultiChild.js +9 -11
- package/lib/ReactPropTransferer.js +44 -29
- package/lib/ReactPropTypes.js +226 -242
- package/lib/ReactPutListenerQueue.js +2 -2
- package/lib/ReactReconcileTransaction.js +14 -14
- package/lib/ReactServerRendering.js +5 -5
- package/lib/ReactServerRenderingTransaction.js +4 -5
- package/lib/ReactTestUtils.js +39 -21
- package/lib/ReactTextComponent.js +8 -22
- package/lib/ReactTransitionChildMapping.js +2 -2
- package/lib/ReactTransitionEvents.js +19 -0
- package/lib/ReactTransitionGroup.js +9 -6
- package/lib/ReactUpdates.js +139 -22
- package/lib/ReactWithAddons.js +5 -2
- package/lib/SVGDOMPropertyConfig.js +97 -0
- package/lib/SimpleEventPlugin.js +7 -1
- package/lib/SyntheticInputEvent.js +52 -0
- package/lib/SyntheticKeyboardEvent.js +33 -4
- package/lib/SyntheticMouseEvent.js +3 -0
- package/lib/SyntheticTouchEvent.js +4 -1
- package/lib/SyntheticUIEvent.js +24 -2
- package/lib/Transaction.js +0 -32
- package/lib/cloneWithProps.js +3 -1
- package/lib/createFullPageComponent.js +1 -1
- package/lib/dangerousStyleValue.js +11 -5
- package/lib/escapeTextForBrowser.js +2 -3
- package/lib/flattenChildren.js +9 -7
- package/lib/getEventKey.js +35 -5
- package/lib/getEventModifierState.js +52 -0
- package/lib/getMarkupWrap.js +2 -0
- package/lib/getTextContentAccessor.js +1 -1
- package/lib/hyphenate.js +3 -0
- package/lib/hyphenateStyleName.js +46 -0
- package/lib/instantiateReactComponent.js +13 -21
- package/lib/invariant.js +17 -19
- package/lib/{objMap.js → mapObject.js} +8 -3
- package/lib/mergeHelpers.js +11 -0
- package/lib/mergeInto.js +3 -2
- package/lib/onlyChild.js +3 -3
- package/lib/performance.js +33 -0
- package/lib/performanceNow.js +5 -14
- package/lib/setInnerHTML.js +85 -0
- package/lib/shouldUpdateReactComponent.js +12 -29
- package/lib/toArray.js +1 -1
- package/lib/traverseAllChildren.js +7 -4
- package/lib/update.js +57 -45
- package/package.json +4 -3
- package/lib/ReactEventTopLevelCallback.js +0 -149
- package/lib/createObjectFrom.js +0 -61
- package/lib/objMapKeyVal.js +0 -47
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
"use strict";
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var invariant = require("./invariant");
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Validate a `componentDescriptor`. This should be exposed publicly in a follow
|
|
@@ -30,10 +30,10 @@ var warning = require("./warning");
|
|
|
30
30
|
*/
|
|
31
31
|
function isValidComponentDescriptor(descriptor) {
|
|
32
32
|
return (
|
|
33
|
-
|
|
34
|
-
typeof descriptor.
|
|
35
|
-
typeof descriptor.
|
|
36
|
-
typeof descriptor.
|
|
33
|
+
descriptor &&
|
|
34
|
+
typeof descriptor.type === 'function' &&
|
|
35
|
+
typeof descriptor.type.prototype.mountComponent === 'function' &&
|
|
36
|
+
typeof descriptor.type.prototype.receiveComponent === 'function'
|
|
37
37
|
);
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -47,24 +47,16 @@ function isValidComponentDescriptor(descriptor) {
|
|
|
47
47
|
* @protected
|
|
48
48
|
*/
|
|
49
49
|
function instantiateReactComponent(descriptor) {
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
|
|
51
|
+
// TODO: Make warning
|
|
52
|
+
// if (__DEV__) {
|
|
53
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
52
54
|
isValidComponentDescriptor(descriptor),
|
|
53
55
|
'Only React Components are valid for mounting.'
|
|
54
|
-
) :
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
var instance = descriptor.__realComponentInstance || descriptor;
|
|
59
|
-
instance._descriptor = descriptor;
|
|
60
|
-
return instance;
|
|
61
|
-
}
|
|
62
|
-
// In prod we don't clone, we simply use the same instance for unaffected
|
|
63
|
-
// behavior. We have to keep the descriptor around for comparison later on.
|
|
64
|
-
// This should ideally be accepted in the constructor of the instance but
|
|
65
|
-
// since that is currently overloaded, we just manually attach it here.
|
|
66
|
-
descriptor._descriptor = descriptor;
|
|
67
|
-
return descriptor;
|
|
56
|
+
) : invariant(isValidComponentDescriptor(descriptor)));
|
|
57
|
+
// }
|
|
58
|
+
|
|
59
|
+
return new descriptor.type(descriptor);
|
|
68
60
|
}
|
|
69
61
|
|
|
70
62
|
module.exports = instantiateReactComponent;
|
package/lib/invariant.js
CHANGED
|
@@ -29,34 +29,32 @@
|
|
|
29
29
|
* will remain to ensure logic does not differ in production.
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
-
var invariant = function(condition) {
|
|
33
|
-
if (
|
|
34
|
-
var error = new Error(
|
|
35
|
-
'Minified exception occured; use the non-minified dev environment for ' +
|
|
36
|
-
'the full error message and additional helpful warnings.'
|
|
37
|
-
);
|
|
38
|
-
error.framesToPop = 1;
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
if ("production" !== process.env.NODE_ENV) {
|
|
44
|
-
invariant = function(condition, format, a, b, c, d, e, f) {
|
|
32
|
+
var invariant = function(condition, format, a, b, c, d, e, f) {
|
|
33
|
+
if ("production" !== process.env.NODE_ENV) {
|
|
45
34
|
if (format === undefined) {
|
|
46
35
|
throw new Error('invariant requires an error message argument');
|
|
47
36
|
}
|
|
37
|
+
}
|
|
48
38
|
|
|
49
|
-
|
|
39
|
+
if (!condition) {
|
|
40
|
+
var error;
|
|
41
|
+
if (format === undefined) {
|
|
42
|
+
error = new Error(
|
|
43
|
+
'Minified exception occurred; use the non-minified dev environment ' +
|
|
44
|
+
'for the full error message and additional helpful warnings.'
|
|
45
|
+
);
|
|
46
|
+
} else {
|
|
50
47
|
var args = [a, b, c, d, e, f];
|
|
51
48
|
var argIndex = 0;
|
|
52
|
-
|
|
49
|
+
error = new Error(
|
|
53
50
|
'Invariant Violation: ' +
|
|
54
51
|
format.replace(/%s/g, function() { return args[argIndex++]; })
|
|
55
52
|
);
|
|
56
|
-
error.framesToPop = 1; // we don't care about invariant's own frame
|
|
57
|
-
throw error;
|
|
58
53
|
}
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
|
|
55
|
+
error.framesToPop = 1; // we don't care about invariant's own frame
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
61
59
|
|
|
62
60
|
module.exports = invariant;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*
|
|
16
|
-
* @providesModule
|
|
16
|
+
* @providesModule mapObject
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
"use strict";
|
|
@@ -25,12 +25,17 @@
|
|
|
25
25
|
*
|
|
26
26
|
* func(value, key, iteration)
|
|
27
27
|
*
|
|
28
|
+
* Grepable names:
|
|
29
|
+
*
|
|
30
|
+
* function objectMap()
|
|
31
|
+
* function objMap()
|
|
32
|
+
*
|
|
28
33
|
* @param {?object} obj Object to map keys over
|
|
29
34
|
* @param {function} func Invoked for each key/val pair.
|
|
30
35
|
* @param {?*} context
|
|
31
36
|
* @return {?object} Result of mapping or null if obj is falsey
|
|
32
37
|
*/
|
|
33
|
-
function
|
|
38
|
+
function mapObject(obj, func, context) {
|
|
34
39
|
if (!obj) {
|
|
35
40
|
return null;
|
|
36
41
|
}
|
|
@@ -44,4 +49,4 @@ function objMap(obj, func, context) {
|
|
|
44
49
|
return ret;
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
module.exports =
|
|
52
|
+
module.exports = mapObject;
|
package/lib/mergeHelpers.js
CHANGED
|
@@ -92,6 +92,17 @@ var mergeHelpers = {
|
|
|
92
92
|
) : invariant(!isTerminal(arg) && !Array.isArray(arg)));
|
|
93
93
|
},
|
|
94
94
|
|
|
95
|
+
/**
|
|
96
|
+
* @param {*} arg
|
|
97
|
+
*/
|
|
98
|
+
checkMergeIntoObjectArg: function(arg) {
|
|
99
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
100
|
+
(!isTerminal(arg) || typeof arg === 'function') && !Array.isArray(arg),
|
|
101
|
+
'Tried to merge into an object, instead got %s.',
|
|
102
|
+
arg
|
|
103
|
+
) : invariant((!isTerminal(arg) || typeof arg === 'function') && !Array.isArray(arg)));
|
|
104
|
+
},
|
|
105
|
+
|
|
95
106
|
/**
|
|
96
107
|
* Checks that a merge was not given a circular object or an object that had
|
|
97
108
|
* too great of depth.
|
package/lib/mergeInto.js
CHANGED
|
@@ -22,15 +22,16 @@
|
|
|
22
22
|
var mergeHelpers = require("./mergeHelpers");
|
|
23
23
|
|
|
24
24
|
var checkMergeObjectArg = mergeHelpers.checkMergeObjectArg;
|
|
25
|
+
var checkMergeIntoObjectArg = mergeHelpers.checkMergeIntoObjectArg;
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* Shallow merges two structures by mutating the first parameter.
|
|
28
29
|
*
|
|
29
|
-
* @param {object} one Object to be merged into.
|
|
30
|
+
* @param {object|function} one Object to be merged into.
|
|
30
31
|
* @param {?object} two Optional object with properties to merge from.
|
|
31
32
|
*/
|
|
32
33
|
function mergeInto(one, two) {
|
|
33
|
-
|
|
34
|
+
checkMergeIntoObjectArg(one);
|
|
34
35
|
if (two != null) {
|
|
35
36
|
checkMergeObjectArg(two);
|
|
36
37
|
for (var key in two) {
|
package/lib/onlyChild.js
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
"use strict";
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var ReactDescriptor = require("./ReactDescriptor");
|
|
21
21
|
|
|
22
22
|
var invariant = require("./invariant");
|
|
23
23
|
|
|
@@ -34,9 +34,9 @@ var invariant = require("./invariant");
|
|
|
34
34
|
*/
|
|
35
35
|
function onlyChild(children) {
|
|
36
36
|
("production" !== process.env.NODE_ENV ? invariant(
|
|
37
|
-
|
|
37
|
+
ReactDescriptor.isValidDescriptor(children),
|
|
38
38
|
'onlyChild must be passed a children with exactly one child.'
|
|
39
|
-
) : invariant(
|
|
39
|
+
) : invariant(ReactDescriptor.isValidDescriptor(children)));
|
|
40
40
|
return children;
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013-2014 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule performance
|
|
17
|
+
* @typechecks
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
|
23
|
+
|
|
24
|
+
var performance;
|
|
25
|
+
|
|
26
|
+
if (ExecutionEnvironment.canUseDOM) {
|
|
27
|
+
performance =
|
|
28
|
+
window.performance ||
|
|
29
|
+
window.msPerformance ||
|
|
30
|
+
window.webkitPerformance;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = performance || {};
|
package/lib/performanceNow.js
CHANGED
|
@@ -14,25 +14,16 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*
|
|
16
16
|
* @providesModule performanceNow
|
|
17
|
-
* @typechecks
|
|
17
|
+
* @typechecks
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
|
20
|
+
var performance = require("./performance");
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
|
-
* Detect if we can use window.performance.now() and gracefully
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* infrastructure.
|
|
23
|
+
* Detect if we can use `window.performance.now()` and gracefully fallback to
|
|
24
|
+
* `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
|
|
25
|
+
* because of Facebook's testing infrastructure.
|
|
29
26
|
*/
|
|
30
|
-
var performance = null;
|
|
31
|
-
|
|
32
|
-
if (ExecutionEnvironment.canUseDOM) {
|
|
33
|
-
performance = window.performance || window.webkitPerformance;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
27
|
if (!performance || !performance.now) {
|
|
37
28
|
performance = Date;
|
|
38
29
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013-2014 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule setInnerHTML
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Set the innerHTML property of a node, ensuring that whitespace is preserved
|
|
25
|
+
* even in IE8.
|
|
26
|
+
*
|
|
27
|
+
* @param {DOMElement} node
|
|
28
|
+
* @param {string} html
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
var setInnerHTML = function(node, html) {
|
|
32
|
+
node.innerHTML = html;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
if (ExecutionEnvironment.canUseDOM) {
|
|
36
|
+
// IE8: When updating a just created node with innerHTML only leading
|
|
37
|
+
// whitespace is removed. When updating an existing node with innerHTML
|
|
38
|
+
// whitespace in root TextNodes is also collapsed.
|
|
39
|
+
// @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html
|
|
40
|
+
|
|
41
|
+
// Feature detection; only IE8 is known to behave improperly like this.
|
|
42
|
+
var testElement = document.createElement('div');
|
|
43
|
+
testElement.innerHTML = ' ';
|
|
44
|
+
if (testElement.innerHTML === '') {
|
|
45
|
+
setInnerHTML = function(node, html) {
|
|
46
|
+
// Magic theory: IE8 supposedly differentiates between added and updated
|
|
47
|
+
// nodes when processing innerHTML, innerHTML on updated nodes suffers
|
|
48
|
+
// from worse whitespace behavior. Re-adding a node like this triggers
|
|
49
|
+
// the initial and more favorable whitespace behavior.
|
|
50
|
+
// TODO: What to do on a detached node?
|
|
51
|
+
if (node.parentNode) {
|
|
52
|
+
node.parentNode.replaceChild(node, node);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// We also implement a workaround for non-visible tags disappearing into
|
|
56
|
+
// thin air on IE8, this only happens if there is no visible text
|
|
57
|
+
// in-front of the non-visible tags. Piggyback on the whitespace fix
|
|
58
|
+
// and simply check if any non-visible tags appear in the source.
|
|
59
|
+
if (html.match(/^[ \r\n\t\f]/) ||
|
|
60
|
+
html[0] === '<' && (
|
|
61
|
+
html.indexOf('<noscript') !== -1 ||
|
|
62
|
+
html.indexOf('<script') !== -1 ||
|
|
63
|
+
html.indexOf('<style') !== -1 ||
|
|
64
|
+
html.indexOf('<meta') !== -1 ||
|
|
65
|
+
html.indexOf('<link') !== -1)) {
|
|
66
|
+
// Recover leading whitespace by temporarily prepending any character.
|
|
67
|
+
// \uFEFF has the potential advantage of being zero-width/invisible.
|
|
68
|
+
node.innerHTML = '\uFEFF' + html;
|
|
69
|
+
|
|
70
|
+
// deleteData leaves an empty `TextNode` which offsets the index of all
|
|
71
|
+
// children. Definitely want to avoid this.
|
|
72
|
+
var textNode = node.firstChild;
|
|
73
|
+
if (textNode.data.length === 1) {
|
|
74
|
+
node.removeChild(textNode);
|
|
75
|
+
} else {
|
|
76
|
+
textNode.deleteData(0, 1);
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
node.innerHTML = html;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
module.exports = setInnerHTML;
|
|
@@ -20,40 +20,23 @@
|
|
|
20
20
|
"use strict";
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
|
-
* Given a `
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* descriptors.
|
|
23
|
+
* Given a `prevDescriptor` and `nextDescriptor`, determines if the existing
|
|
24
|
+
* instance should be updated as opposed to being destroyed or replaced by a new
|
|
25
|
+
* instance. Both arguments are descriptors. This ensures that this logic can
|
|
26
|
+
* operate on stateless trees without any backing instance.
|
|
28
27
|
*
|
|
29
|
-
* @param {?object}
|
|
28
|
+
* @param {?object} prevDescriptor
|
|
30
29
|
* @param {?object} nextDescriptor
|
|
31
|
-
* @return {boolean} True if
|
|
30
|
+
* @return {boolean} True if the existing instance should be updated.
|
|
32
31
|
* @protected
|
|
33
32
|
*/
|
|
34
|
-
function shouldUpdateReactComponent(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
(prevComponentInstance.props && prevComponentInstance.props.key) ===
|
|
33
|
+
function shouldUpdateReactComponent(prevDescriptor, nextDescriptor) {
|
|
34
|
+
if (prevDescriptor && nextDescriptor &&
|
|
35
|
+
prevDescriptor.type === nextDescriptor.type && (
|
|
36
|
+
(prevDescriptor.props && prevDescriptor.props.key) ===
|
|
39
37
|
(nextDescriptor.props && nextDescriptor.props.key)
|
|
40
|
-
)) {
|
|
41
|
-
|
|
42
|
-
return true;
|
|
43
|
-
} else {
|
|
44
|
-
if ("production" !== process.env.NODE_ENV) {
|
|
45
|
-
if (prevComponentInstance.state) {
|
|
46
|
-
console.warn(
|
|
47
|
-
'A recent change to React has been found to impact your code. ' +
|
|
48
|
-
'A mounted component will now be unmounted and replaced by a ' +
|
|
49
|
-
'component (of the same class) if their owners are different. ' +
|
|
50
|
-
'Previously, ownership was not considered when updating.',
|
|
51
|
-
prevComponentInstance,
|
|
52
|
-
nextDescriptor
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
38
|
+
) && prevDescriptor._owner === nextDescriptor._owner) {
|
|
39
|
+
return true;
|
|
57
40
|
}
|
|
58
41
|
return false;
|
|
59
42
|
}
|
package/lib/toArray.js
CHANGED
|
@@ -25,7 +25,7 @@ var invariant = require("./invariant");
|
|
|
25
25
|
* This API assumes the caller knows the contents of the data type. For less
|
|
26
26
|
* well defined inputs use createArrayFrom.
|
|
27
27
|
*
|
|
28
|
-
* @param {object|function} obj
|
|
28
|
+
* @param {object|function|filelist} obj
|
|
29
29
|
* @return {array}
|
|
30
30
|
*/
|
|
31
31
|
function toArray(obj) {
|
|
@@ -153,11 +153,11 @@ var traverseAllChildrenImpl =
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
} else if (type === 'string') {
|
|
156
|
-
var normalizedText =
|
|
156
|
+
var normalizedText = ReactTextComponent(children);
|
|
157
157
|
callback(traverseContext, normalizedText, storageName, indexSoFar);
|
|
158
158
|
subtreeCount += 1;
|
|
159
159
|
} else if (type === 'number') {
|
|
160
|
-
var normalizedNumber =
|
|
160
|
+
var normalizedNumber = ReactTextComponent('' + children);
|
|
161
161
|
callback(traverseContext, normalizedNumber, storageName, indexSoFar);
|
|
162
162
|
subtreeCount += 1;
|
|
163
163
|
}
|
|
@@ -180,11 +180,14 @@ var traverseAllChildrenImpl =
|
|
|
180
180
|
* @param {?*} children Children tree object.
|
|
181
181
|
* @param {!function} callback To invoke upon traversing each child.
|
|
182
182
|
* @param {?*} traverseContext Context for traversal.
|
|
183
|
+
* @return {!number} The number of children in this subtree.
|
|
183
184
|
*/
|
|
184
185
|
function traverseAllChildren(children, callback, traverseContext) {
|
|
185
|
-
if (children
|
|
186
|
-
|
|
186
|
+
if (children == null) {
|
|
187
|
+
return 0;
|
|
187
188
|
}
|
|
189
|
+
|
|
190
|
+
return traverseAllChildrenImpl(children, '', 0, callback, traverseContext);
|
|
188
191
|
}
|
|
189
192
|
|
|
190
193
|
module.exports = traverseAllChildren;
|