Add forwardRef DEV warning for prop-types on render function (#12644)
Brian Vaughn committed
Apr 18, 2018 at 16:36 UTC
920f30ef7732e87045ae6652c464b58267991b8f
2 files changed
+29
packages/react/src/__tests__/forwardRef-test.internal.js
+21
@@ -249,4 +249,25 @@ describe('forwardRef', () => {
249
'forwardRef requires a render function but was given undefined.',
250
);
251
});
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
+ });
273
});
packages/react/src/forwardRef.js
+8
@@ -18,6 +18,14 @@ export default function forwardRef<Props, ElementType: React$ElementType>(
18
'forwardRef requires a render function but was given %s.',
19
render === null ? 'null' : typeof render,
20
);
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
+ }
29
}
30
31
return {