PropTypes
[EN]
React provides an internal mechanism for adding type checking to components.
React components use a special property named propTypes
to set up type checking.
Example of work propTypes
:
export class MessageDisplayer extends React.Component {
render() {
return <h1>{this.props.message}</h1>;
}
}
// This propTypes object should have
// one property for each expected prop:
MessageDisplayer.propTypes = {
message: React.PropTypes.string
};
List of available types, which using for work with propTypes
:
import PropTypes from 'prop-types';
MyComponent.propTypes = {
// Можно объявить проп на соответствие определённому JS-типу.
// По умолчанию это не обязательно.
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
// Все, что может быть отрендерено:
// числа, строки, элементы или массивы
// (или фрагменты) содержащие эти типы
optionalNode: PropTypes.node,
// React-элемент
optionalElement: PropTypes.element,
// Тип React-элемент (например, MyComponent).
optionalElementType: PropTypes.elementType,
// Можно указать, что проп должен быть экземпляром класса
// Для этого используется оператор `instanceof`.
optionalMessage: PropTypes.instanceOf(Message),
// Вы можете задать ограничение конкретными значениями
// при помощи перечисления
optionalEnum: PropTypes.oneOf(['News', 'Photos']),
// Объект, одного из нескольких типов
optionalUnion: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.instanceOf(Message)
]),
// Массив объектов конкретного типа
optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
// Объект со свойствами конкретного типа
optionalObjectOf: PropTypes.objectOf(PropTypes.number),
// Объект с определённой структурой
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
}),
// Объект со строгой структурой,
// при наличии необъявленных свойств будут сформированы предупреждения
optionalObjectWithStrictShape: PropTypes.exact({
name: PropTypes.string,
quantity: PropTypes.number
}),
// Можно добавить`isRequired` к любому приведённому выше типу,
// чтобы показывать предупреждение,
// если проп не передан
requiredFunc: PropTypes.func.isRequired,
// Значение любого типа
requiredAny: PropTypes.any.isRequired,
// Можно добавить собственный валидатор.
// Он должен возвращать объект `Error` при ошибке валидации.
// Не используйте `console.warn` или `throw`
// - это не будет работать внутри `oneOfType`
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error(
'Проп `' + propName + '` компонента' +
' `' + componentName + '` имеет неправильное значение'
);
}
},
// Можно задать свой валидатор для `arrayOf` и `objectOf`.
// Он должен возвращать объект Error при ошибке валидации.
// Валидатор будет вызван для каждого элемента в массиве
// или для каждого свойства объекта.
// Первые два параметра валидатора
// - это массив или объект и ключ текущего элемента
customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
if (!/matchme/.test(propValue[key])) {
return new Error(
'Проп `' + propFullName + '` компонента' +
' `' + componentName + '` имеет неправильное значение'
);
}
})
};
[RU]
React предоставляет внутренний механизм для добавления проверки типов у компонентов.
React-компоненты используют специальное свойство, именуемое, как propTypes
, для установки проверки типа.
Пример работы propTypes
:
export class MessageDisplayer extends React.Component {
render() {
return <h1>{this.props.message}</h1>;
}
}
// This propTypes object should have
// one property for each expected prop:
MessageDisplayer.propTypes = {
message: React.PropTypes.string
};
Список доступных типов, которые используются для работы с propTypes
:
import PropTypes from 'prop-types';
MyComponent.propTypes = {
// Можно объявить проп на соответствие определённому JS-типу.
// По умолчанию это не обязательно.
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
// Все, что может быть отрендерено:
// числа, строки, элементы или массивы
// (или фрагменты) содержащие эти типы
optionalNode: PropTypes.node,
// React-элемент
optionalElement: PropTypes.element,
// Тип React-элемент (например, MyComponent).
optionalElementType: PropTypes.elementType,
// Можно указать, что проп должен быть экземпляром класса
// Для этого используется оператор `instanceof`.
optionalMessage: PropTypes.instanceOf(Message),
// Вы можете задать ограничение конкретными значениями
// при помощи перечисления
optionalEnum: PropTypes.oneOf(['News', 'Photos']),
// Объект, одного из нескольких типов
optionalUnion: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.instanceOf(Message)
]),
// Массив объектов конкретного типа
optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
// Объект со свойствами конкретного типа
optionalObjectOf: PropTypes.objectOf(PropTypes.number),
// Объект с определённой структурой
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
}),
// Объект со строгой структурой,
// при наличии необъявленных свойств будут сформированы предупреждения
optionalObjectWithStrictShape: PropTypes.exact({
name: PropTypes.string,
quantity: PropTypes.number
}),
// Можно добавить`isRequired` к любому приведённому выше типу,
// чтобы показывать предупреждение,
// если проп не передан
requiredFunc: PropTypes.func.isRequired,
// Значение любого типа
requiredAny: PropTypes.any.isRequired,
// Можно добавить собственный валидатор.
// Он должен возвращать объект `Error` при ошибке валидации.
// Не используйте `console.warn` или `throw`
// - это не будет работать внутри `oneOfType`
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error(
'Проп `' + propName + '` компонента' +
' `' + componentName + '` имеет неправильное значение'
);
}
},
// Можно задать свой валидатор для `arrayOf` и `objectOf`.
// Он должен возвращать объект Error при ошибке валидации.
// Валидатор будет вызван для каждого элемента в массиве
// или для каждого свойства объекта.
// Первые два параметра валидатора
// - это массив или объект и ключ текущего элемента
customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
if (!/matchme/.test(propValue[key])) {
return new Error(
'Проп `' + propFullName + '` компонента' +
' `' + componentName + '` имеет неправильное значение'
);
}
})
};