diff --git a/packages/react/src/__tests__/forwardRef-test.internal.js b/packages/react/src/__tests__/forwardRef-test.internal.js index 068448c43740..5780dbd054c6 100644 --- a/packages/react/src/__tests__/forwardRef-test.internal.js +++ b/packages/react/src/__tests__/forwardRef-test.internal.js @@ -249,4 +249,25 @@ describe('forwardRef', () => { 'forwardRef requires a render function but was given undefined.', ); }); + + it('should warn if the render function provided has propTypes or defaultProps attributes', () => { + function renderWithPropTypes() { + return null; + } + renderWithPropTypes.propTypes = {}; + + function renderWithDefaultProps() { + return null; + } + renderWithDefaultProps.defaultProps = {}; + + expect(() => React.forwardRef(renderWithPropTypes)).toWarnDev( + 'forwardRef render functions do not support propTypes or defaultProps. ' + + 'Did you accidentally pass a React component?', + ); + expect(() => React.forwardRef(renderWithDefaultProps)).toWarnDev( + 'forwardRef render functions do not support propTypes or defaultProps. ' + + 'Did you accidentally pass a React component?', + ); + }); }); diff --git a/packages/react/src/forwardRef.js b/packages/react/src/forwardRef.js index 6a923be12795..6c3c1a4343ba 100644 --- a/packages/react/src/forwardRef.js +++ b/packages/react/src/forwardRef.js @@ -18,6 +18,14 @@ export default function forwardRef( 'forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render, ); + + if (render != null) { + warning( + render.defaultProps == null && render.propTypes == null, + 'forwardRef render functions do not support propTypes or defaultProps. ' + + 'Did you accidentally pass a React component?', + ); + } } return {