Skip to content

Commit f30ca94

Browse files
committed
Match react-devtools display name behavior for React.memo
1 parent 3ca1904 commit f30ca94

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

packages/react-reconciler/src/__tests__/ReactLazy-test.internal.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,7 @@ describe('ReactLazy', () => {
867867
return props.inner + props.outer;
868868
};
869869
Add = React.memo(Add);
870+
Add.displayName = 'Add';
870871
Add.propTypes = {
871872
inner: PropTypes.number.isRequired,
872873
innerWithDefault: PropTypes.number.isRequired,
@@ -882,6 +883,7 @@ describe('ReactLazy', () => {
882883
return props.inner + props.outer;
883884
};
884885
Add = React.memo(Add);
886+
Add.displayName = 'Add';
885887
Add.propTypes = {
886888
inner: PropTypes.number.isRequired,
887889
};
@@ -945,7 +947,7 @@ describe('ReactLazy', () => {
945947
expect(() => {
946948
expect(Scheduler).toFlushAndYield(['Inner default text']);
947949
}).toErrorDev(
948-
'The prop `text` is marked as required in `T`, but its value is `undefined`',
950+
'The prop `text` is marked as required in `Memo(T)`, but its value is `undefined`',
949951
);
950952
expect(root).toMatchRenderedOutput('Inner default text');
951953

@@ -958,7 +960,7 @@ describe('ReactLazy', () => {
958960
);
959961
expect(Scheduler).toFlushAndYield([null]);
960962
}).toErrorDev(
961-
'The prop `text` is marked as required in `T`, but its value is `null`',
963+
'The prop `text` is marked as required in `Memo(T)`, but its value is `null`',
962964
);
963965
expect(root).toMatchRenderedOutput(null);
964966
});
@@ -1050,6 +1052,7 @@ describe('ReactLazy', () => {
10501052
Add.defaultProps = {
10511053
inner: 2,
10521054
};
1055+
Add.displayName = 'Add';
10531056
const LazyAdd = lazy(() => fakeImport(Add));
10541057
const root = ReactTestRenderer.create(
10551058
<Suspense fallback={<Text text="Loading..." />}>

packages/react-reconciler/src/__tests__/ReactMemo-test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ describe('memo', () => {
365365
expect(Scheduler).toFlushWithoutYielding();
366366
}).toErrorDev(
367367
// Outer props are checked in createElement
368-
'Invalid prop `outer` of type `string` supplied to `FnInner`, expected `number`.',
368+
'Invalid prop `outer` of type `string` supplied to `Memo(FnInner)`, expected `number`.',
369369
);
370370

371371
// Update
@@ -374,7 +374,7 @@ describe('memo', () => {
374374
expect(Scheduler).toFlushWithoutYielding();
375375
}).toErrorDev(
376376
// Outer props are checked in createElement
377-
'Invalid prop `outer` of type `boolean` supplied to `FnInner`, expected `number`.',
377+
'Invalid prop `outer` of type `boolean` supplied to `Memo(FnInner)`, expected `number`.',
378378
);
379379
});
380380

@@ -408,8 +408,8 @@ describe('memo', () => {
408408
);
409409
expect(Scheduler).toFlushWithoutYielding();
410410
}).toErrorDev([
411-
'Invalid prop `outer` of type `string` supplied to `Inner`, expected `number`.',
412-
'Invalid prop `middle` of type `string` supplied to `Inner`, expected `number`.',
411+
'Invalid prop `outer` of type `string` supplied to `Memo(Memo(Inner))`, expected `number`.',
412+
'Invalid prop `middle` of type `string` supplied to `Memo(Inner)`, expected `number`.',
413413
'Invalid prop `inner` of type `string` supplied to `Inner`, expected `number`.',
414414
]);
415415

@@ -422,8 +422,8 @@ describe('memo', () => {
422422
);
423423
expect(Scheduler).toFlushWithoutYielding();
424424
}).toErrorDev([
425-
'Invalid prop `outer` of type `boolean` supplied to `Inner`, expected `number`.',
426-
'Invalid prop `middle` of type `boolean` supplied to `Inner`, expected `number`.',
425+
'Invalid prop `outer` of type `boolean` supplied to `Memo(Memo(Inner))`, expected `number`.',
426+
'Invalid prop `middle` of type `boolean` supplied to `Memo(Inner)`, expected `number`.',
427427
'Invalid prop `inner` of type `boolean` supplied to `Inner`, expected `number`.',
428428
]);
429429
});

packages/shared/getComponentName.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ function getWrappedName(
3030
innerType: any,
3131
wrapperName: string,
3232
): string {
33-
const functionName = innerType.displayName || innerType.name || '';
33+
const innerName = getComponentName(innerType) || '';
3434
return (
3535
(outerType: any).displayName ||
36-
(functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName)
36+
(innerName !== '' ? `${wrapperName}(${innerName})` : wrapperName)
3737
);
3838
}
3939

@@ -85,7 +85,7 @@ function getComponentName(type: mixed): string | null {
8585
case REACT_FORWARD_REF_TYPE:
8686
return getWrappedName(type, type.render, 'ForwardRef');
8787
case REACT_MEMO_TYPE:
88-
return getComponentName(type.type);
88+
return getWrappedName(type, type.type, 'Memo');
8989
case REACT_BLOCK_TYPE:
9090
return getComponentName(type._render);
9191
case REACT_LAZY_TYPE: {

0 commit comments

Comments
 (0)