build/web/c0.js
function warnAndMonitorForKeyUse(message, element, parentType) {
  var ownerName = getCurrentOwnerDisplayName();
  var parentName = typeof parentType === 'string' ?
    parentType : parentType.displayName || parentType.name;

  var useName = ownerName || parentName;
  var memoizer = ownerHasKeyUseWarning[message] || (
    (ownerHasKeyUseWarning[message] = {})
  );
  if (memoizer.hasOwnProperty(useName)) {
    return;
  }
  memoizer[useName] = true;

  var parentOrOwnerAddendum =
    ownerName ? (" Check the render method of " + ownerName + ".") :
    parentName ? (" Check the React.render call using <" + parentName + ">.") :
    '';

  // Usually the current owner is the offender, but if it accepts children as a
  // property, it may be the creator of the child that's responsible for
  // assigning it a key.
  var childOwnerAddendum = '';
  if (element &&
      element._owner &&
      element._owner !== ReactCurrentOwner.current) {
    // Name of the component that originally created this child.
    var childOwnerName = getName(element._owner);

    childOwnerAddendum = (" It was passed a child from " + childOwnerName + ".");
  }

  ("production" !== process.env.NODE_ENV ? warning(
    false,
    message + '%s%s See https://fb.me/react-warning-keys for more information.',
    parentOrOwnerAddendum,
    childOwnerAddendum
  ) : null);
}
function warnAndMonitorForKeyUse(message, element, parentType) {
  var ownerName = getCurrentOwnerDisplayName();
  var parentName = typeof parentType === 'string' ?
    parentType : parentType.displayName || parentType.name;

  var useName = ownerName || parentName;
  var memoizer = ownerHasKeyUseWarning[message] || (
    (ownerHasKeyUseWarning[message] = {})
  );
  if (memoizer.hasOwnProperty(useName)) {
    return;
  }
  memoizer[useName] = true;

  var parentOrOwnerAddendum =
    ownerName ? (" Check the render method of " + ownerName + ".") :
    parentName ? (" Check the React.render call using <" + parentName + ">.") :
    '';

  // Usually the current owner is the offender, but if it accepts children as a
  // property, it may be the creator of the child that's responsible for
  // assigning it a key.
  var childOwnerAddendum = '';
  if (element &&
      element._owner &&
      element._owner !== ReactCurrentOwner.current) {
    // Name of the component that originally created this child.
    var childOwnerName = getName(element._owner);

    childOwnerAddendum = (" It was passed a child from " + childOwnerName + ".");
  }

  ("production" !== process.env.NODE_ENV ? warning(
    false,
    message + '%s%s See https://fb.me/react-warning-keys for more information.',
    parentOrOwnerAddendum,
    childOwnerAddendum
  ) : null);
}
function warnAndMonitorForKeyUse ( message , element , parentType ) { var ownerName = getCurrentOwnerDisplayName ( ) ; var parentName = typeof parentType === 'string' ? parentType : parentType . displayName || parentType . name ; var useName = ownerName || parentName ; var memoizer = ownerHasKeyUseWarning [ message ] || ( ( ownerHasKeyUseWarning [ message ] = { } ) ) ; if ( memoizer . hasOwnProperty ( useName ) ) { return ; } memoizer [ useName ] = true ; var parentOrOwnerAddendum = ownerName ? ( " Check the render method of " + ownerName + "." ) : parentName ? ( " Check the React.render call using <" + parentName + ">." ) : '' ; // Usually the current owner is the offender, but if it accepts children as a // property, it may be the creator of the child that's responsible for // assigning it a key. var childOwnerAddendum = '' ; if ( element && element . _owner && element . _owner !== ReactCurrentOwner . current ) { // Name of the component that originally created this child. var childOwnerName = getName ( element . _owner ) ; childOwnerAddendum = ( " It was passed a child from " + childOwnerName + "." ) ; } ( "production" !== process . env . NODE_ENV ? warning ( false , message + '%s%s See https://fb.me/react-warning-keys for more information.' , parentOrOwnerAddendum , childOwnerAddendum ) : null ) ; }
Shared warning and monitoring code for the key warnings.

@internal
@param {string} message The base warning that gets output.
@param {ReactElement} element Component that requires a key.
@param {*} parentType element's parent's type.
Shared warning and monitoring code for the key warnings .