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

Function forwardRef

packages/react/src/ReactForwardRef.js:12–83  ·  packages/react/src/ReactForwardRef.js::forwardRef
(
  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 class="st">'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 class="st">'forwardRef requires a render function but received a `memo` ' +
22 class="st">'component. Instead of forwardRef(memo(...)), use ' +
23 class="st">'memo(forwardRef(...)).',
24 );
25 } else if (typeof render !== class="st">'function') {
26 console.error(
27 class="st">'forwardRef requires a render function but was given %s.',
28 render === null ? class="st">'null' : typeof render,
29 );
30 } else {
31 if (render.length !== 0 && render.length !== 2) {
32 console.error(
33 class="st">'forwardRef render functions accept exactly two parameters: props and ref. %s',
34 render.length === 1
35 ? class="st">'Did you forget to use the ref parameter?'
36 : class="st">'Any additional parameter will be undefined.',
37 );
38 }
39 }
40
41 if (render != null) {
42 if (render.defaultProps != null) {
43 console.error(
44 class="st">'forwardRef render functions do not support defaultProps. ' +
45 class="st">'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, class="st">'displayName', {
58 enumerable: false,
59 configurable: true,
60 get: function () {
61 return ownName;
62 },
63 set: function (name) {
64 ownName = name;
65
66 class="cm">// The inner component shouldn't inherit this display name in most cases,
67 class="cm">// because the component may be used elsewhere.
68 class="cm">// But it's nice for anonymous functions to inherit the name,
69 class="cm">// so that our component-stack generation logic will display their frames.

Calls 1

errorMethod · 0.65

Tested by

no test coverage detected