MCPcopy
hub / github.com/react/react / forwardRef

Function forwardRef

packages/react/src/ReactForwardRef.js:12–83  ·  view source on GitHub ↗
(
  render: (
    props: Props,
    ref: React$RefSetter<React$ElementRef<ElementType>>,
  ) => React$Node,
)

Source from the content-addressed store, hash-verified

10import {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from 'shared/ReactSymbols';
11
12export function forwardRef<Props, ElementType: React$ElementType>(
13 render: (
14 props: Props,
15 ref: React$RefSetter<React$ElementRef<ElementType>>,
16 ) => React$Node,
17) {
18 if (__DEV__) {
19 if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
20 console.error(
21 'forwardRef requires a render function but received a `memo` ' +
22 'component. Instead of forwardRef(memo(...)), use ' +
23 'memo(forwardRef(...)).',
24 );
25 } else if (typeof render !== 'function') {
26 console.error(
27 'forwardRef requires a render function but was given %s.',
28 render === null ? 'null' : typeof render,
29 );
30 } else {
31 if (render.length !== 0 && render.length !== 2) {
32 console.error(
33 'forwardRef render functions accept exactly two parameters: props and ref. %s',
34 render.length === 1
35 ? 'Did you forget to use the ref parameter?'
36 : 'Any additional parameter will be undefined.',
37 );
38 }
39 }
40
41 if (render != null) {
42 if (render.defaultProps != null) {
43 console.error(
44 'forwardRef render functions do not support defaultProps. ' +
45 'Did you accidentally pass a React component?',
46 );
47 }
48 }
49 }
50
51 const elementType = {
52 $$typeof: REACT_FORWARD_REF_TYPE,
53 render,
54 };
55 if (__DEV__) {
56 let ownName;
57 Object.defineProperty(elementType, 'displayName', {
58 enumerable: false,
59 configurable: true,
60 get: function () {
61 return ownName;
62 },
63 set: function (name) {
64 ownName = name;
65
66 // The inner component shouldn't inherit this display name in most cases,
67 // because the component may be used elsewhere.
68 // But it's nice for anonymous functions to inherit the name,
69 // so that our component-stack generation logic will display their frames.

Calls 1

errorMethod · 0.65

Tested by

no test coverage detected