id | title | challengeType | isRequired | forumTopicId |
---|---|---|---|---|
5a24c314108439a4d403616d |
Use PropTypes to Define the Props You Expect |
6 |
false |
301419 |
propTypes
on your component to require the data to be of type array
. This will throw a useful warning when the data is of any other type.
It's considered a best practice to set propTypes
when you know the type of a prop ahead of time. You can define a propTypes
property for a component in the same way you defined defaultProps
. Doing this will check that props of a given key are present with a given type. Here's an example to require the type function
for a prop called handleClick
:
MyComponent.propTypes = { handleClick: PropTypes.func.isRequired }
In the example above, the PropTypes.func
part checks that handleClick
is a function. Adding isRequired
tells React that handleClick
is a required property for that component. You will see a warning if that prop isn't provided. Also notice that func
represents function
. Among the seven JavaScript primitive types, function
and boolean
(written as bool
) are the only two that use unusual spelling. In addition to the primitive types, there are other types available. For example, you can check that a prop is a React element. Please refer to the documentation for all of the options.
Note: As of React v15.5.0, PropTypes
is imported independently from React, like this:
import PropTypes from 'prop-types';
propTypes
for the Items
component to require quantity
as a prop and verify that it is of type number
.
tests:
- text: The <code>ShoppingCart</code> component should render.
testString: assert((function() { const mockedComponent = Enzyme.mount(React.createElement(ShoppingCart)); return mockedComponent.find('ShoppingCart').length === 1; })());
- text: The <code>Items</code> component should render.
testString: assert((function() { const mockedComponent = Enzyme.mount(React.createElement(ShoppingCart)); return mockedComponent.find('Items').length === 1; })());
- text: The <code>Items</code> component should include a <code>propTypes</code> check that requires <code>quantity</code> to be a <code>number</code>.
testString: getUserInput => assert((function() { const noWhiteSpace = getUserInput('index').replace(/ /g, ''); return noWhiteSpace.includes('quantity:PropTypes.number.isRequired') && noWhiteSpace.includes('Items.propTypes='); })());
const Items = (props) => {
return <h1>Current Quantity of Items in Cart: {props.quantity}</h1>
};
// change code below this line
// change code above this line
Items.defaultProps = {
quantity: 0
};
class ShoppingCart extends React.Component {
constructor(props) {
super(props);
}
render() {
return <Items />
}
};
var PropTypes = {
number: { isRequired: true }
};
ReactDOM.render(<ShoppingCart />, document.getElementById('root'))
const Items = (props) => {
return <h1>Current Quantity of Items in Cart: {props.quantity}</h1>
};
// change code below this line
Items.propTypes = {
quantity: PropTypes.number.isRequired
};
// change code above this line
Items.defaultProps = {
quantity: 0
};
class ShoppingCart extends React.Component {
constructor(props) {
super(props);
}
render() {
return <Items />
}
};