Лекция 34
npm install prop-types
import React from 'react';
import PropTypes from 'prop-types';
class Greeting extends React.Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
Greeting.propTypes = {
name: PropTypes.string
};
MyComponent.propTypes = {
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
};
MyComponent.propTypes = {
optionalArray: PropTypes.array,
optionalArrayOf: PropTypes.arrayOf(
PropTypes.number
),
};
MyComponent.propTypes = {
optionalObject: PropTypes.object,
optionalObjectOf: PropTypes.objectOf(
PropTypes.number
),
};
MyComponent.propTypes = {
// любой тип который React может отрендерить
// число, строка, элемент или массив с ними
optionalNode: PropTypes.node,
};
MyComponent.propTypes = {
// React-элемент
optionalElement: PropTypes.element,
};
MyComponent.propTypes = {
optionalMessage: PropTypes.instanceOf(Message),
};
MyComponent.propTypes = {
optionalEnum: PropTypes.oneOf(
['News', 'Photos']
),
};
MyComponent.propTypes = {
optionalUnion: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.instanceOf(Message)
]),
};
MyComponent.propTypes = {
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
}),
};
MyComponent.propTypes = {
requiredFunc: PropTypes.func.isRequired,
};
MyComponent.propTypes = {
requiredAny: PropTypes.any.isRequired,
};
MyComponent.propTypes = {
custom: (props, propName, componentName) => {
if (!/matchme/.test(props[propName])) {
return new Error('Invalid prop');
}
},
customArray: PropTypes.arrayOf(
(propValue, key, componentName, location, propFullName) => {...}
),
customObject: PropTypes.objectOf(
...
)
};
class Greeting extends React.Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
// Specifies the default values for props:
Greeting.defaultProps = {
name: 'Stranger'
};
// Renders "Hello, Stranger":
ReactDOM.render(
<Greeting />,
document.getElementById('example')
);