prop-types
Runtime type checking for React props and similar objects.
Installation
npm install --save prop-types
Importing
import PropTypes from 'prop-types';
var PropTypes = require('prop-types');
If you prefer a <script>
tag, you can get it from window.PropTypes
global:
<script src="https://unpkg.com/prop-types/prop-types.js"></script>
<script src="https://unpkg.com/prop-types/prop-types.min.js"></script>
Difference from React.PropTypes
: Don’t Call Validator Functions
When you migrate components to use the standalone prop-types
, all validator functions will start throwing an error if you call them directly. This makes sure that nobody relies on them in production code, and it is safe to strip their implementations to optimize the bundle size.
Code like this is still fine:
MyComponent.propTypes = {
myProp: PropTypes.bool
};
However, code like this will not work with the prop-types
package:
var errorOrNull = PropTypes.bool(42, 'myProp', 'MyComponent', 'prop');
It will throw an error:
Calling PropTypes validators directly is not supported by the `prop-types` package.
Use PropTypes.checkPropTypes() to call them.
This is new behavior, and you will only encounter it when you migrate from React.PropTypes
to the prop-types
package. For the vast majority of components, this doesn’t matter, and if you didn’t see this warning in your components, your code is safe to migrate. This is not a breaking change in React because you are only opting into this change for a component by explicitly changing your imports to use prop-types
. If you temporarily need the old behavior, you can keep using React.PropTypes
until React 16.
If you absolutely need to trigger the validation manually, call PropTypes.checkPropTypes()
. Unlike the validators themselves, this function is safe to call in production, as it will be replaced by an empty function:
PropTypes.checkPropTypes(MyComponent.propTypes, props, 'prop', 'MyComponent');
You might also see this error if you’re calling a PropTypes
validator from your own custom PropTypes
validator. In this case, the fix is to make sure that you are passing all of the arguments to the inner function. There is a more in-depth explanation of how to fix it on this page. Alternatively, you can temporarily keep using React.PropTypes
until React 16, as it would still only warn in this case.
If you use a bundler like Browserify or Webpack, don’t forget to follow these instructions to correctly bundle your application in development or production mode. Otherwise you’ll ship unnecessary code to your users.
Usage
Refer to the React documentation for more information.
Migrating from React.PropTypes
Check out Migrating from React.PropTypes for details on how to migrate to prop-types
from React.PropTypes
.