PropTypes — это механизм проверки типов пропсов (props) в React-компонентах. Давайте разберем пошагово, как их правильно использовать в современных React-приложениях.
С React версии 15.5+ PropTypes вынесены в отдельный пакет:
npm install prop-types
import PropTypes from 'prop-types';
function Welcome({ name, age }) {
return <h1>Hello, {name}! Age: {age}</h1>;
}
Welcome.propTypes = {
name: PropTypes.string.isRequired,
age: PropTypes.number
};
MyComponent.propTypes = {
// Примитивные типы
optionalString: PropTypes.string,
optionalNumber: PropTypes.number,
optionalBool: PropTypes.bool,
// Обязательный пропс
requiredFunc: PropTypes.func.isRequired,
// Комплексные типы
optionalArray: PropTypes.array,
optionalObject: PropTypes.object,
// React-специфичные
optionalNode: PropTypes.node, // Что-то рендеримое
optionalElement: PropTypes.element, // React-элемент
optionalElementType: PropTypes.elementType // Тип компонента
};
User.propTypes = {
profile: PropTypes.shape({
username: PropTypes.string.isRequired,
email: PropTypes.string,
age: PropTypes.number
})
};
TodoList.propTypes = {
items: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.number.isRequired,
text: PropTypes.string
})
)
};
RangeInput.propTypes = {
value: function(props, propName, componentName) {
if (props[propName] < 0 || props[propName] > 100) {
return new Error(
`Invalid prop ${propName} in ${componentName}. Must be between 0 and 100.`
);
}
}
};
PropTypes часто используют вместе с defaultProps:
Welcome.defaultProps = {
age: 18 // Значение по умолчанию, если пропс не передан
};
import PropTypes from 'prop-types';
const Button = ({ text, onClick, disabled }) => (
<button onClick={onClick} disabled={disabled}>
{text}
</button>
);
Button.propTypes = {
text: PropTypes.string.isRequired,
onClick: PropTypes.func,
disabled: PropTypes.bool
};
Button.defaultProps = {
disabled: false
};
PropTypes используются через определение объекта propTypes
у компонента, где указываются ожидаемые типы пропсов. Это мощный инструмент для документирования и валидации входных данных компонента, особенно полезный в больших проектах и командах.