109
enableRenderableContext,
110
enableRefAsProp,
111
disableLegacyMode,
112
+ disableDefaultPropsExceptForClasses,
113
} from 'shared/ReactFeatureFlags';
114
import isArray from 'shared/isArray';
115
import shallowEqual from 'shared/shallowEqual';
248
updateClassInstance,
249
resolveClassComponentProps,
250
} from './ReactFiberClassComponent';
250
-import {resolveDefaultProps} from './ReactFiberLazyComponent';
251
+import {resolveDefaultPropsOnNonClassComponent} from './ReactFiberLazyComponent';
252
import {
253
createFiberFromTypeAndProps,
254
createFiberFromFragment,
488
isSimpleFunctionComponent(type) &&
489
Component.compare === null &&
490
// SimpleMemoComponent codepath doesn't resolve outer props either.
490
- Component.defaultProps === undefined
491
+ (disableDefaultPropsExceptForClasses ||
492
+ Component.defaultProps === undefined)
493
) {
494
let resolvedType = type;
495
if (__DEV__) {
511
renderLanes,
512
);
513
}
512
- if (__DEV__) {
513
- if (Component.defaultProps !== undefined) {
514
- const componentName = getComponentNameFromType(type) || 'Unknown';
515
- if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
516
- console.error(
517
- '%s: Support for defaultProps will be removed from memo components ' +
518
- 'in a future major release. Use JavaScript default parameters instead.',
519
- componentName,
520
- );
521
- didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;
514
+ if (!disableDefaultPropsExceptForClasses) {
515
+ if (__DEV__) {
516
+ if (Component.defaultProps !== undefined) {
517
+ const componentName = getComponentNameFromType(type) || 'Unknown';
518
+ if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
519
+ console.error(
520
+ '%s: Support for defaultProps will be removed from memo components ' +
521
+ 'in a future major release. Use JavaScript default parameters instead.',
522
+ componentName,
523
+ );
524
+ didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;
525
+ }
526
}
527
}
528
}
1770
renderLanes,
1771
);
1772
} else {
1769
- const resolvedProps = resolveDefaultProps(Component, props);
1773
+ const resolvedProps = disableDefaultPropsExceptForClasses
1774
+ ? props
1775
+ : resolveDefaultPropsOnNonClassComponent(Component, props);
1776
workInProgress.tag = FunctionComponent;
1777
if (__DEV__) {
1778
validateFunctionComponentInDev(workInProgress, Component);
1790
} else if (Component !== undefined && Component !== null) {
1791
const $$typeof = Component.$$typeof;
1792
if ($$typeof === REACT_FORWARD_REF_TYPE) {
1787
- const resolvedProps = resolveDefaultProps(Component, props);
1793
+ const resolvedProps = disableDefaultPropsExceptForClasses
1794
+ ? props
1795
+ : resolveDefaultPropsOnNonClassComponent(Component, props);
1796
workInProgress.tag = ForwardRef;
1797
if (__DEV__) {
1798
workInProgress.type = Component =
1806
renderLanes,
1807
);
1808
} else if ($$typeof === REACT_MEMO_TYPE) {
1801
- const resolvedProps = resolveDefaultProps(Component, props);
1809
+ const resolvedProps = disableDefaultPropsExceptForClasses
1810
+ ? props
1811
+ : resolveDefaultPropsOnNonClassComponent(Component, props);
1812
workInProgress.tag = MemoComponent;
1813
return updateMemoComponent(
1814
null,
1815
workInProgress,
1816
Component,
1807
- resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too
1817
+ disableDefaultPropsExceptForClasses
1818
+ ? resolvedProps
1819
+ : resolveDefaultPropsOnNonClassComponent(
1820
+ Component.type,
1821
+ resolvedProps,
1822
+ ), // The inner type can have defaults too
1823
renderLanes,
1824
);
1825
}
1915
}
1916
}
1917
1903
- if (Component.defaultProps !== undefined) {
1918
+ if (
1919
+ !disableDefaultPropsExceptForClasses &&
1920
+ Component.defaultProps !== undefined
1921
+ ) {
1922
const componentName = getComponentNameFromType(Component) || 'Unknown';
1923
1924
if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
3915
const Component = workInProgress.type;
3916
const unresolvedProps = workInProgress.pendingProps;
3917
const resolvedProps =
3918
+ disableDefaultPropsExceptForClasses ||
3919
workInProgress.elementType === Component
3920
? unresolvedProps
3902
- : resolveDefaultProps(Component, unresolvedProps);
3921
+ : resolveDefaultPropsOnNonClassComponent(Component, unresolvedProps);
3922
return updateFunctionComponent(
3923
current,
3924
workInProgress,
3967
const type = workInProgress.type;
3968
const unresolvedProps = workInProgress.pendingProps;
3969
const resolvedProps =
3970
+ disableDefaultPropsExceptForClasses ||
3971
workInProgress.elementType === type
3972
? unresolvedProps
3953
- : resolveDefaultProps(type, unresolvedProps);
3973
+ : resolveDefaultPropsOnNonClassComponent(type, unresolvedProps);
3974
return updateForwardRef(
3975
current,
3976
workInProgress,
3993
const type = workInProgress.type;
3994
const unresolvedProps = workInProgress.pendingProps;
3995
// Resolve outer props first, then resolve inner props.
3976
- let resolvedProps = resolveDefaultProps(type, unresolvedProps);
3977
- resolvedProps = resolveDefaultProps(type.type, resolvedProps);
3996
+ let resolvedProps = disableDefaultPropsExceptForClasses
3997
+ ? unresolvedProps
3998
+ : resolveDefaultPropsOnNonClassComponent(type, unresolvedProps);
3999
+ resolvedProps = disableDefaultPropsExceptForClasses
4000
+ ? resolvedProps
4001
+ : resolveDefaultPropsOnNonClassComponent(type.type, resolvedProps);
4002
return updateMemoComponent(
4003
current,
4004
workInProgress,