Skip to content

Commit 169bc35

Browse files
bvaughnrhagigi
authored andcommitted
Add forwardRef DEV warning for prop-types on render function (facebook#12644)
1 parent cd21a24 commit 169bc35

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

packages/react/src/__tests__/forwardRef-test.internal.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,4 +249,25 @@ describe('forwardRef', () => {
249249
'forwardRef requires a render function but was given undefined.',
250250
);
251251
});
252+
253+
it('should warn if the render function provided has propTypes or defaultProps attributes', () => {
254+
function renderWithPropTypes() {
255+
return null;
256+
}
257+
renderWithPropTypes.propTypes = {};
258+
259+
function renderWithDefaultProps() {
260+
return null;
261+
}
262+
renderWithDefaultProps.defaultProps = {};
263+
264+
expect(() => React.forwardRef(renderWithPropTypes)).toWarnDev(
265+
'forwardRef render functions do not support propTypes or defaultProps. ' +
266+
'Did you accidentally pass a React component?',
267+
);
268+
expect(() => React.forwardRef(renderWithDefaultProps)).toWarnDev(
269+
'forwardRef render functions do not support propTypes or defaultProps. ' +
270+
'Did you accidentally pass a React component?',
271+
);
272+
});
252273
});

packages/react/src/forwardRef.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ export default function forwardRef<Props, ElementType: React$ElementType>(
1818
'forwardRef requires a render function but was given %s.',
1919
render === null ? 'null' : typeof render,
2020
);
21+
22+
if (render != null) {
23+
warning(
24+
render.defaultProps == null && render.propTypes == null,
25+
'forwardRef render functions do not support propTypes or defaultProps. ' +
26+
'Did you accidentally pass a React component?',
27+
);
28+
}
2129
}
2230

2331
return {

0 commit comments

Comments
 (0)