Skip to content

Commit a01dc08

Browse files
committed
Cleanup disableDefaultPropsExceptForClasses flag
1 parent 9406162 commit a01dc08

21 files changed

+17
-1023
lines changed

packages/react-debug-tools/src/__tests__/ReactHooksInspectionIntegration-test.js

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ let React;
1414
let ReactTestRenderer;
1515
let ReactDebugTools;
1616
let act;
17-
let assertConsoleErrorDev;
1817
let useMemoCache;
1918

2019
function normalizeSourceLoc(tree) {
@@ -34,7 +33,7 @@ describe('ReactHooksInspectionIntegration', () => {
3433
jest.resetModules();
3534
React = require('react');
3635
ReactTestRenderer = require('react-test-renderer');
37-
({act, assertConsoleErrorDev} = require('internal-test-utils'));
36+
({act} = require('internal-test-utils'));
3837
ReactDebugTools = require('react-debug-tools');
3938
useMemoCache = require('react/compiler-runtime').c;
4039
});
@@ -2321,57 +2320,6 @@ describe('ReactHooksInspectionIntegration', () => {
23212320
});
23222321
});
23232322

2324-
// @gate !disableDefaultPropsExceptForClasses
2325-
it('should support defaultProps and lazy', async () => {
2326-
const Suspense = React.Suspense;
2327-
2328-
function Foo(props) {
2329-
const [value] = React.useState(props.defaultValue.slice(0, 3));
2330-
return <div>{value}</div>;
2331-
}
2332-
Foo.defaultProps = {
2333-
defaultValue: 'default',
2334-
};
2335-
2336-
async function fakeImport(result) {
2337-
return {default: result};
2338-
}
2339-
2340-
const LazyFoo = React.lazy(() => fakeImport(Foo));
2341-
2342-
const renderer = ReactTestRenderer.create(
2343-
<Suspense fallback="Loading...">
2344-
<LazyFoo />
2345-
</Suspense>,
2346-
);
2347-
2348-
await act(async () => await LazyFoo);
2349-
assertConsoleErrorDev([
2350-
'Foo: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.',
2351-
]);
2352-
2353-
const childFiber = renderer.root._currentFiber();
2354-
const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
2355-
expect(normalizeSourceLoc(tree)).toMatchInlineSnapshot(`
2356-
[
2357-
{
2358-
"debugInfo": null,
2359-
"hookSource": {
2360-
"columnNumber": 0,
2361-
"fileName": "**",
2362-
"functionName": "Foo",
2363-
"lineNumber": 0,
2364-
},
2365-
"id": 0,
2366-
"isStateEditable": true,
2367-
"name": "State",
2368-
"subHooks": [],
2369-
"value": "def",
2370-
},
2371-
]
2372-
`);
2373-
});
2374-
23752323
// This test case is based on an open source bug report:
23762324
// https://github.com/facebookincubator/redux-react-hook/issues/34#issuecomment-466693787
23772325
it('should properly advance the current hook for useContext', async () => {

packages/react-dom/src/__tests__/ReactDeprecationWarnings-test.js

Lines changed: 0 additions & 72 deletions
This file was deleted.

packages/react-dom/src/__tests__/ReactFunctionComponent-test.js

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -205,27 +205,6 @@ describe('ReactFunctionComponent', () => {
205205
]);
206206
});
207207

208-
// @gate !disableDefaultPropsExceptForClasses
209-
it('should support default props', async () => {
210-
function Child(props) {
211-
return <div>{props.test}</div>;
212-
}
213-
Child.defaultProps = {test: 2};
214-
215-
const container = document.createElement('div');
216-
const root = ReactDOMClient.createRoot(container);
217-
218-
await act(() => {
219-
root.render(<Child />);
220-
});
221-
expect(container.textContent).toBe('2');
222-
assertConsoleErrorDev([
223-
'Child: Support for defaultProps will be removed from function components in a future major release. ' +
224-
'Use JavaScript default parameters instead.\n' +
225-
' in Child (at **)',
226-
]);
227-
});
228-
229208
// @gate !disableLegacyContext && !disableLegacyContextForFunctionComponents
230209
it('should receive context', async () => {
231210
class Parent extends React.Component {

packages/react-reconciler/src/ReactFiberBeginWork.js

Lines changed: 10 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ import {
117117
enableCPUSuspense,
118118
enablePostpone,
119119
disableLegacyMode,
120-
disableDefaultPropsExceptForClasses,
121120
enableHydrationLaneScheduling,
122121
enableViewTransition,
123122
enableFragmentRefs,
@@ -258,7 +257,6 @@ import {
258257
updateClassInstance,
259258
resolveClassComponentProps,
260259
} from './ReactFiberClassComponent';
261-
import {resolveDefaultPropsOnNonClassComponent} from './ReactFiberLazyComponent';
262260
import {
263261
createFiberFromTypeAndProps,
264262
createFiberFromFragment,
@@ -327,7 +325,6 @@ let didWarnAboutGetDerivedStateOnFunctionComponent;
327325
export let didWarnAboutReassigningProps: boolean;
328326
let didWarnAboutRevealOrder;
329327
let didWarnAboutTailOptions;
330-
let didWarnAboutDefaultPropsOnFunctionComponent;
331328
let didWarnAboutClassNameOnViewTransition;
332329

333330
if (__DEV__) {
@@ -338,7 +335,6 @@ if (__DEV__) {
338335
didWarnAboutReassigningProps = false;
339336
didWarnAboutRevealOrder = ({}: {[string]: boolean});
340337
didWarnAboutTailOptions = ({}: {[string]: boolean});
341-
didWarnAboutDefaultPropsOnFunctionComponent = ({}: {[string]: boolean});
342338
didWarnAboutClassNameOnViewTransition = ({}: {[string]: boolean});
343339
}
344340

@@ -482,13 +478,7 @@ function updateMemoComponent(
482478
): null | Fiber {
483479
if (current === null) {
484480
const type = Component.type;
485-
if (
486-
isSimpleFunctionComponent(type) &&
487-
Component.compare === null &&
488-
// SimpleMemoComponent codepath doesn't resolve outer props either.
489-
(disableDefaultPropsExceptForClasses ||
490-
Component.defaultProps === undefined)
491-
) {
481+
if (isSimpleFunctionComponent(type) && Component.compare === null) {
492482
let resolvedType = type;
493483
if (__DEV__) {
494484
resolvedType = resolveFunctionForHotReloading(type);
@@ -509,21 +499,6 @@ function updateMemoComponent(
509499
renderLanes,
510500
);
511501
}
512-
if (!disableDefaultPropsExceptForClasses) {
513-
if (__DEV__) {
514-
if (Component.defaultProps !== undefined) {
515-
const componentName = getComponentNameFromType(type) || 'Unknown';
516-
if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
517-
console.error(
518-
'%s: Support for defaultProps will be removed from memo components ' +
519-
'in a future major release. Use JavaScript default parameters instead.',
520-
componentName,
521-
);
522-
didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;
523-
}
524-
}
525-
}
526-
}
527502
const child = createFiberFromTypeAndProps(
528503
Component.type,
529504
null,
@@ -1495,7 +1470,6 @@ function updateFunctionComponent(
14951470
export function replayFunctionComponent(
14961471
current: Fiber | null,
14971472
workInProgress: Fiber,
1498-
nextProps: any,
14991473
Component: any,
15001474
secondArg: any,
15011475
renderLanes: Lanes,
@@ -1512,7 +1486,7 @@ export function replayFunctionComponent(
15121486
current,
15131487
workInProgress,
15141488
Component,
1515-
nextProps,
1489+
workInProgress.pendingProps,
15161490
secondArg,
15171491
);
15181492
const hasId = checkDidRenderIdHook();
@@ -2072,9 +2046,6 @@ function mountLazyComponent(
20722046
renderLanes,
20732047
);
20742048
} else {
2075-
const resolvedProps = disableDefaultPropsExceptForClasses
2076-
? props
2077-
: resolveDefaultPropsOnNonClassComponent(Component, props);
20782049
workInProgress.tag = FunctionComponent;
20792050
if (__DEV__) {
20802051
validateFunctionComponentInDev(workInProgress, Component);
@@ -2085,16 +2056,13 @@ function mountLazyComponent(
20852056
null,
20862057
workInProgress,
20872058
Component,
2088-
resolvedProps,
2059+
props,
20892060
renderLanes,
20902061
);
20912062
}
20922063
} else if (Component !== undefined && Component !== null) {
20932064
const $$typeof = Component.$$typeof;
20942065
if ($$typeof === REACT_FORWARD_REF_TYPE) {
2095-
const resolvedProps = disableDefaultPropsExceptForClasses
2096-
? props
2097-
: resolveDefaultPropsOnNonClassComponent(Component, props);
20982066
workInProgress.tag = ForwardRef;
20992067
if (__DEV__) {
21002068
workInProgress.type = Component =
@@ -2104,24 +2072,16 @@ function mountLazyComponent(
21042072
null,
21052073
workInProgress,
21062074
Component,
2107-
resolvedProps,
2075+
props,
21082076
renderLanes,
21092077
);
21102078
} else if ($$typeof === REACT_MEMO_TYPE) {
2111-
const resolvedProps = disableDefaultPropsExceptForClasses
2112-
? props
2113-
: resolveDefaultPropsOnNonClassComponent(Component, props);
21142079
workInProgress.tag = MemoComponent;
21152080
return updateMemoComponent(
21162081
null,
21172082
workInProgress,
21182083
Component,
2119-
disableDefaultPropsExceptForClasses
2120-
? resolvedProps
2121-
: resolveDefaultPropsOnNonClassComponent(
2122-
Component.type,
2123-
resolvedProps,
2124-
), // The inner type can have defaults too
2084+
props,
21252085
renderLanes,
21262086
);
21272087
}
@@ -2198,22 +2158,6 @@ function validateFunctionComponentInDev(workInProgress: Fiber, Component: any) {
21982158
);
21992159
}
22002160

2201-
if (
2202-
!disableDefaultPropsExceptForClasses &&
2203-
Component.defaultProps !== undefined
2204-
) {
2205-
const componentName = getComponentNameFromType(Component) || 'Unknown';
2206-
2207-
if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
2208-
console.error(
2209-
'%s: Support for defaultProps will be removed from function components ' +
2210-
'in a future major release. Use JavaScript default parameters instead.',
2211-
componentName,
2212-
);
2213-
didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;
2214-
}
2215-
}
2216-
22172161
if (typeof Component.getDerivedStateFromProps === 'function') {
22182162
const componentName = getComponentNameFromType(Component) || 'Unknown';
22192163

@@ -4176,11 +4120,7 @@ function beginWork(
41764120
case FunctionComponent: {
41774121
const Component = workInProgress.type;
41784122
const unresolvedProps = workInProgress.pendingProps;
4179-
const resolvedProps =
4180-
disableDefaultPropsExceptForClasses ||
4181-
workInProgress.elementType === Component
4182-
? unresolvedProps
4183-
: resolveDefaultPropsOnNonClassComponent(Component, unresolvedProps);
4123+
const resolvedProps = unresolvedProps;
41844124
return updateFunctionComponent(
41854125
current,
41864126
workInProgress,
@@ -4226,18 +4166,11 @@ function beginWork(
42264166
case HostPortal:
42274167
return updatePortalComponent(current, workInProgress, renderLanes);
42284168
case ForwardRef: {
4229-
const type = workInProgress.type;
4230-
const unresolvedProps = workInProgress.pendingProps;
4231-
const resolvedProps =
4232-
disableDefaultPropsExceptForClasses ||
4233-
workInProgress.elementType === type
4234-
? unresolvedProps
4235-
: resolveDefaultPropsOnNonClassComponent(type, unresolvedProps);
42364169
return updateForwardRef(
42374170
current,
42384171
workInProgress,
4239-
type,
4240-
resolvedProps,
4172+
workInProgress.type,
4173+
workInProgress.pendingProps,
42414174
renderLanes,
42424175
);
42434176
}
@@ -4252,20 +4185,11 @@ function beginWork(
42524185
case ContextConsumer:
42534186
return updateContextConsumer(current, workInProgress, renderLanes);
42544187
case MemoComponent: {
4255-
const type = workInProgress.type;
4256-
const unresolvedProps = workInProgress.pendingProps;
4257-
// Resolve outer props first, then resolve inner props.
4258-
let resolvedProps = disableDefaultPropsExceptForClasses
4259-
? unresolvedProps
4260-
: resolveDefaultPropsOnNonClassComponent(type, unresolvedProps);
4261-
resolvedProps = disableDefaultPropsExceptForClasses
4262-
? resolvedProps
4263-
: resolveDefaultPropsOnNonClassComponent(type.type, resolvedProps);
42644188
return updateMemoComponent(
42654189
current,
42664190
workInProgress,
4267-
type,
4268-
resolvedProps,
4191+
workInProgress.type,
4192+
workInProgress.pendingProps,
42694193
renderLanes,
42704194
);
42714195
}

0 commit comments

Comments
 (0)