@@ -41,6 +41,24 @@ var loggedTypeFailures = {};
41
41
42
42
var NUMERIC_PROPERTY_REGEX = / ^ \d + $ / ;
43
43
44
+ /**
45
+ * Gets the instance's name for use in warnings.
46
+ *
47
+ * @internal
48
+ * @return {?string } Display name or undefined
49
+ */
50
+ function getName ( instance ) {
51
+ var publicInstance = instance && instance . getPublicInstance ( ) ;
52
+ if ( ! publicInstance ) {
53
+ return undefined ;
54
+ }
55
+ var constructor = publicInstance . constructor ;
56
+ if ( ! constructor ) {
57
+ return undefined ;
58
+ }
59
+ return constructor . displayName || constructor . name || undefined ;
60
+ }
61
+
44
62
/**
45
63
* Gets the current owner's displayName for use in warnings.
46
64
*
@@ -50,7 +68,7 @@ var NUMERIC_PROPERTY_REGEX = /^\d+$/;
50
68
function getCurrentOwnerDisplayName ( ) {
51
69
var current = ReactCurrentOwner . current ;
52
70
return (
53
- current && current . getPublicInstance ( ) . constructor . displayName || undefined
71
+ current && getName ( current ) || undefined
54
72
) ;
55
73
}
56
74
@@ -110,7 +128,7 @@ function validatePropertyKey(name, element, parentType) {
110
128
*/
111
129
function warnAndMonitorForKeyUse ( warningID , message , element , parentType ) {
112
130
var ownerName = getCurrentOwnerDisplayName ( ) ;
113
- var parentName = parentType . displayName ;
131
+ var parentName = parentType . displayName || parentType . name ;
114
132
115
133
var useName = ownerName || parentName ;
116
134
var memoizer = ownerHasKeyUseWarning [ warningID ] ;
@@ -131,8 +149,7 @@ function warnAndMonitorForKeyUse(warningID, message, element, parentType) {
131
149
element . _owner &&
132
150
element . _owner !== ReactCurrentOwner . current ) {
133
151
// Name of the component that originally created this child.
134
- childOwnerName =
135
- element . _owner . getPublicInstance ( ) . constructor . displayName ;
152
+ childOwnerName = getName ( element . _owner ) ;
136
153
137
154
message += ` It was passed a child from ${ childOwnerName } .` ;
138
155
}
@@ -262,7 +279,7 @@ var ReactElementValidator = {
262
279
}
263
280
264
281
if ( type ) {
265
- var name = type . displayName ;
282
+ var name = type . displayName || type . name ;
266
283
if ( type . propTypes ) {
267
284
checkPropTypes (
268
285
name ,
0 commit comments