Actuellement prop-types
La bibliothèque ne le permet pas. Pour contourner ce problème, j'utilise une fonction de validation personnalisée.
MyComponent.propTypes = {
nullableArray: function(props, propName, componentName) {
const { propName: data } = props;
if (data === undefined) {
return new Error(`Undefined ${propName} is not allowed`);
}
if (data !== null) {
return; //this is allow when data is loading
}
if (!_.isArray(data)) {
return new Error(`${propName} must be an array`);
}
}
};
Vous pouvez faire un pas de plus en créant une fonction d'ordre élevé pour générer la fonction de validation. Ceci devrait vous aider à démarrer.
generateRequiredOrNullValidationFunction = expectedType => {
if (expectedType !== "array") {
return Error(`Unexpected ${expectedType}`);
}
return function(props, propName, componentName) {
const { [propName]: data } = props;
if (data === undefined) {
return new Error(`Undefined ${propName} is not allowed`);
}
if (data !== null) {
return; //this is allow when data is loading
}
if (expectedType === "array" && !_.isArray(data)) {
return new Error(`${propName} must be an array`);
}
};
};
Dans cet extrait, expectedType
est une énumération telle que bool
, array
, number
...
0 votes
Pourriez-vous préciser que vous voulez qu'un avertissement soit émis lorsque la prop est passée
undefined
mais n'ont pas de problème avecnull
(c'est-à-dire pour détecter une faute de frappe) ?1 votes
Il semble que ce soit le dernier en date, puisque j'ai suivi l'affaire. github.com/facebook/prop-types/pull/90