Skip to content

Commit

Permalink
Remove defaultProps support (except for classes) (#28733)
Browse files Browse the repository at this point in the history
This removes defaultProps support for all component types except for
classes. We've chosen to continue supporting defaultProps for classes
because lots of older code relies on it, and unlike function components,
(which can use default params), there's no straightforward alternative.

By implication, it also removes support for setting defaultProps on
`React.lazy` wrapper. So this will not work:

```js
const MyClassComponent = React.lazy(() => import('./MyClassComponent'));
// MyClassComponent is not actually a class; it's a lazy wrapper. So
// defaultProps does not work.
MyClassComponent.defaultProps = { foo: 'bar' };
```

However, if you set the default props on the class itself, then it's
fine.

For classes, this change also moves where defaultProps are resolved.
Previously, defaultProps were resolved by the JSX runtime. This change
is only observable if you introspect a JSX element, which is relatively
rare but does happen.

In other words, previously `<ClassWithDefaultProp />.props.aDefaultProp`
would resolve to the default prop value, but now it does not.

DiffTrain build for [48b4ecc](48b4ecc)
  • Loading branch information
kassens committed Apr 11, 2024
1 parent 2f685cb commit a4c720b
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 9 deletions.
2 changes: 1 addition & 1 deletion compiled/facebook-www/REVISION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c0b5d435986e7d9b52a529b73b9317a7e5772172
48b4ecc9012638ed51b275aad24b2086b8215e32
8 changes: 2 additions & 6 deletions compiled/facebook-www/ReactFlightDOMClient-dev.modern.js
Original file line number Diff line number Diff line change
Expand Up @@ -834,10 +834,6 @@ if (__DEV__) {
return new Set(_data);
}

case "B": {
return undefined;
}

case "I": {
// $Infinity
return Infinity;
Expand Down Expand Up @@ -890,9 +886,9 @@ if (__DEV__) {

default: {
// We assume that anything else is a reference ID.
var _id7 = parseInt(value.slice(1), 16);
var _id6 = parseInt(value.slice(1), 16);

var _chunk2 = getChunk(response, _id7);
var _chunk2 = getChunk(response, _id6);

switch (_chunk2.status) {
case RESOLVED_MODEL:
Expand Down
2 changes: 0 additions & 2 deletions compiled/facebook-www/ReactFlightDOMClient-prod.modern.js
Original file line number Diff line number Diff line change
Expand Up @@ -294,8 +294,6 @@ function parseModelString(response, parentObject, key, value) {
(response = getOutlinedModel(response, parentObject)),
new Set(response)
);
case "B":
return;
case "I":
return Infinity;
case "-":
Expand Down

0 comments on commit a4c720b

Please sign in to comment.