@samitouri / QOS-React / commits / 920f30ef77

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 {