Es ist nicht bequem, aber es ist möglich, einen eigenen PropType zu schreiben.
Von der Quelle der Reaktion (die es leider nicht an dieser Stelle aussetzt):
function createChainableTypeChecker(validate) {
function checkType(isRequired, props, propName, componentName, location, propFullName) {
componentName = componentName || ANONYMOUS;
propFullName = propFullName || propName;
if (props[propName] == null) {
var locationName = ReactPropTypeLocationNames[location];
if (isRequired) {
return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));
}
return null;
} else {
return validate(props, propName, componentName, location, propFullName);
}
}
var chainedCheckType = checkType.bind(null, false);
chainedCheckType.isRequired = checkType.bind(null, true);
return chainedCheckType;
}
, die Sie mögen so verwenden können:
const map = createChainableTypeChecker(function(props, propName, componentName, location, propFullName) {
if (...) {
return null; // pass the check
}
return new Error('Error message'); // fail the check
});
Und wie kann ich ein Array von diesen beispielsweise angeben, oder eine PropTypes.Shape mit diesem PropType innen? –
Speichern Sie diese Funktion als Variable (z. B. 'MyPropTypes.mapRequired') und verwenden Sie' MyPropTypes.mapRequired', wo auch immer Sie einen anderen Prop-Typ wie 'PropType.string' verwenden. – Brandon