diff --git a/packages/react-reconciler/src/__tests__/ReactMemo-test.js b/packages/react-reconciler/src/__tests__/ReactMemo-test.js
index 5be63d65a3757..18fa2a5566878 100644
--- a/packages/react-reconciler/src/__tests__/ReactMemo-test.js
+++ b/packages/react-reconciler/src/__tests__/ReactMemo-test.js
@@ -516,7 +516,7 @@ describe('memo', () => {
);
});
- it('should honor a inner displayName if set on the wrapped function', () => {
+ it('should honor a outter displayName when wrapped component and memo component set displayName at the same time.', () => {
function Component(props) {
return
;
}
@@ -532,8 +532,31 @@ describe('memo', () => {
ReactNoop.render(),
).toErrorDev(
'Warning: Failed prop type: The prop `required` is marked as required in ' +
- '`Foo`, but its value is `undefined`.\n' +
- ' in Foo (at **)',
+ '`Bar`, but its value is `undefined`.\n' +
+ ' in Bar (at **)',
+ );
+ });
+
+ it('can set react memo component displayName multiple times', () => {
+ function Component(props) {
+ return ;
+ }
+ Component.displayName = 'Foo';
+
+ const MemoComponent = React.memo(Component);
+ MemoComponent.displayName = 'MemoComp01';
+ MemoComponent.displayName = 'MemoComp02';
+ MemoComponent.displayName = 'MemoComp03';
+ MemoComponent.propTypes = {
+ required: PropTypes.string.isRequired,
+ };
+
+ expect(() =>
+ ReactNoop.render(),
+ ).toErrorDev(
+ 'Warning: Failed prop type: The prop `required` is marked as required in ' +
+ '`MemoComp03`, but its value is `undefined`.\n' +
+ ' in MemoComp03 (at **)',
);
});
}
diff --git a/packages/react/src/ReactMemo.js b/packages/react/src/ReactMemo.js
index 2531c1a1879f0..796ba2e393cb8 100644
--- a/packages/react/src/ReactMemo.js
+++ b/packages/react/src/ReactMemo.js
@@ -36,9 +36,14 @@ export function memo(
return ownName;
},
set: function(name) {
- ownName = name;
- if (type.displayName == null) {
+ if (typeof name === 'string') {
+ ownName = name;
type.displayName = name;
+ } else {
+ console.error(
+ "%s: is not valid displayName type, React memo's displayName should be a string",
+ typeof name,
+ );
}
},
});