mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-03-26 07:04:05 +08:00
Updates from Wed 25 Mar
- [RFC][ReactNative] Integrate dev menu directly into RootView | Alex Kotliarskyi - flowify Libraries/ReactIOS | Marshall Roch - [WIP] Added support for italics and additional font weights | Nick Lockwood - [ReactNative] Improve View documentation | Christopher Chedeau - [react-packager] Readme | Amjad Masad - Fix for incorrect contentSize reported by RCTScrollView | Nick Lockwood - [ReactNative] Flow and doc formatting for NetInfo | Eric Vicenti - [ReactNative] Document AppStateIOS | Eric Vicenti
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @providesModule diffRawProperties
|
||||
* @flow
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
@@ -21,34 +22,41 @@
|
||||
* previous. These properties are as supplied to component construction.
|
||||
* @return {?object}
|
||||
*/
|
||||
function diffRawProperties(updatePayload, prevProps, nextProps, validAttributes) {
|
||||
function diffRawProperties(
|
||||
updatePayload: ?Object,
|
||||
prevProps: ?Object,
|
||||
nextProps: ?Object,
|
||||
validAttributes: Object
|
||||
): ?Object {
|
||||
var validAttributeConfig;
|
||||
var nextProp;
|
||||
var prevProp;
|
||||
var isScalar;
|
||||
var shouldUpdate;
|
||||
|
||||
for (var propKey in nextProps) {
|
||||
validAttributeConfig = validAttributes[propKey];
|
||||
if (!validAttributeConfig) {
|
||||
continue; // not a valid native prop
|
||||
}
|
||||
prevProp = prevProps && prevProps[propKey];
|
||||
nextProp = nextProps[propKey];
|
||||
if (prevProp !== nextProp) {
|
||||
// If you want a property's diff to be detected, you must configure it
|
||||
// to be so - *or* it must be a scalar property. For now, we'll allow
|
||||
// creation with any attribute that is not scalar, but we should
|
||||
// eventually even reject those unless they are properly configured.
|
||||
isScalar = typeof nextProp !== 'object' || nextProp === null;
|
||||
shouldUpdate = isScalar ||
|
||||
!prevProp ||
|
||||
validAttributeConfig.diff &&
|
||||
validAttributeConfig.diff(prevProp, nextProp);
|
||||
if (nextProps) {
|
||||
for (var propKey in nextProps) {
|
||||
validAttributeConfig = validAttributes[propKey];
|
||||
if (!validAttributeConfig) {
|
||||
continue; // not a valid native prop
|
||||
}
|
||||
prevProp = prevProps && prevProps[propKey];
|
||||
nextProp = nextProps[propKey];
|
||||
if (prevProp !== nextProp) {
|
||||
// If you want a property's diff to be detected, you must configure it
|
||||
// to be so - *or* it must be a scalar property. For now, we'll allow
|
||||
// creation with any attribute that is not scalar, but we should
|
||||
// eventually even reject those unless they are properly configured.
|
||||
isScalar = typeof nextProp !== 'object' || nextProp === null;
|
||||
shouldUpdate = isScalar ||
|
||||
!prevProp ||
|
||||
validAttributeConfig.diff &&
|
||||
validAttributeConfig.diff(prevProp, nextProp);
|
||||
|
||||
if (shouldUpdate) {
|
||||
updatePayload = updatePayload || {};
|
||||
updatePayload[propKey] = nextProp;
|
||||
if (shouldUpdate) {
|
||||
updatePayload = updatePayload || {};
|
||||
updatePayload[propKey] = nextProp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,31 +64,33 @@ function diffRawProperties(updatePayload, prevProps, nextProps, validAttributes)
|
||||
// Also iterate through all the previous props to catch any that have been
|
||||
// removed and make sure native gets the signal so it can reset them to the
|
||||
// default.
|
||||
for (var propKey in prevProps) {
|
||||
validAttributeConfig = validAttributes[propKey];
|
||||
if (!validAttributeConfig) {
|
||||
continue; // not a valid native prop
|
||||
}
|
||||
if (updatePayload && updatePayload[propKey] !== undefined) {
|
||||
continue; // Prop already specified
|
||||
}
|
||||
prevProp = prevProps[propKey];
|
||||
nextProp = nextProps && nextProps[propKey];
|
||||
if (prevProp !== nextProp) {
|
||||
if (nextProp === undefined) {
|
||||
nextProp = null; // null is a sentinel we explicitly send to native
|
||||
if (prevProps) {
|
||||
for (var propKey in prevProps) {
|
||||
validAttributeConfig = validAttributes[propKey];
|
||||
if (!validAttributeConfig) {
|
||||
continue; // not a valid native prop
|
||||
}
|
||||
// If you want a property's diff to be detected, you must configure it
|
||||
// to be so - *or* it must be a scalar property. For now, we'll allow
|
||||
// creation with any attribute that is not scalar, but we should
|
||||
// eventually even reject those unless they are properly configured.
|
||||
isScalar = typeof nextProp !== 'object' || nextProp === null;
|
||||
shouldUpdate = isScalar && prevProp !== nextProp ||
|
||||
validAttributeConfig.diff &&
|
||||
validAttributeConfig.diff(prevProp, nextProp);
|
||||
if (shouldUpdate) {
|
||||
updatePayload = updatePayload || {};
|
||||
updatePayload[propKey] = nextProp;
|
||||
if (updatePayload && updatePayload[propKey] !== undefined) {
|
||||
continue; // Prop already specified
|
||||
}
|
||||
prevProp = prevProps[propKey];
|
||||
nextProp = nextProps && nextProps[propKey];
|
||||
if (prevProp !== nextProp) {
|
||||
if (nextProp === undefined) {
|
||||
nextProp = null; // null is a sentinel we explicitly send to native
|
||||
}
|
||||
// If you want a property's diff to be detected, you must configure it
|
||||
// to be so - *or* it must be a scalar property. For now, we'll allow
|
||||
// creation with any attribute that is not scalar, but we should
|
||||
// eventually even reject those unless they are properly configured.
|
||||
isScalar = typeof nextProp !== 'object' || nextProp === null;
|
||||
shouldUpdate = isScalar && prevProp !== nextProp ||
|
||||
validAttributeConfig.diff &&
|
||||
validAttributeConfig.diff(prevProp, nextProp);
|
||||
if (shouldUpdate) {
|
||||
updatePayload = updatePayload || {};
|
||||
updatePayload[propKey] = nextProp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user