Fix prop overrides of TouchableWithoutFeedback (#23966)

Summary:
Child props were being overridden by `<Touchable>` props even when the `<Touchable>` props were undefined.

[General] [Fixed] - Prevent prop override by TouchableWithoutFeedback when undefined
Pull Request resolved: https://github.com/facebook/react-native/pull/23966

Differential Revision: D14502918

Pulled By: cpojer

fbshipit-source-id: 614ee43bbb6f062a98bd9318693807320979a016
This commit is contained in:
Alec Larson 2019-03-18 10:46:30 -07:00 коммит произвёл Facebook Github Bot
Родитель 8266f61935
Коммит 68825f9ca5
1 изменённых файлов: 26 добавлений и 10 удалений

Просмотреть файл

@ -46,6 +46,22 @@ type FocusEvent = TargetEvent;
const PRESS_RETENTION_OFFSET = {top: 20, left: 20, right: 20, bottom: 30};
const OVERRIDE_PROPS = [
'accessibilityComponentType',
'accessibilityLabel',
'accessibilityHint',
'accessibilityIgnoresInvertColors',
'accessibilityRole',
'accessibilityStates',
'accessibilityTraits',
'hitSlop',
'nativeID',
'onBlur',
'onFocus',
'onLayout',
'testID',
];
export type Props = $ReadOnly<{|
accessible?: ?boolean,
accessibilityComponentType?: ?AccessibilityComponentType,
@ -92,6 +108,7 @@ const TouchableWithoutFeedback = ((createReactClass({
accessibilityComponentType: PropTypes.oneOf(
DeprecatedAccessibilityComponentTypes,
),
accessibilityIgnoresInvertColors: PropTypes.bool,
accessibilityRole: PropTypes.oneOf(DeprecatedAccessibilityRoles),
accessibilityStates: PropTypes.arrayOf(
PropTypes.oneOf(DeprecatedAccessibilityStates),
@ -239,18 +256,17 @@ const TouchableWithoutFeedback = ((createReactClass({
Touchable.renderDebugView({color: 'red', hitSlop: this.props.hitSlop}),
);
}
const overrides = {};
for (const prop of OVERRIDE_PROPS) {
if (this.props[prop] !== undefined) {
overrides[prop] = this.props[prop];
}
}
return (React: any).cloneElement(child, {
...overrides,
accessible: this.props.accessible !== false,
accessibilityLabel: this.props.accessibilityLabel,
accessibilityHint: this.props.accessibilityHint,
accessibilityComponentType: this.props.accessibilityComponentType,
accessibilityRole: this.props.accessibilityRole,
accessibilityStates: this.props.accessibilityStates,
accessibilityTraits: this.props.accessibilityTraits,
nativeID: this.props.nativeID,
testID: this.props.testID,
onLayout: this.props.onLayout,
hitSlop: this.props.hitSlop,
onStartShouldSetResponder: this.touchableHandleStartShouldSetResponder,
onResponderTerminationRequest: this
.touchableHandleResponderTerminationRequest,