Comment marquer une propriété comme devant être un élément DOM?
Cette page dit que PropTypes.element
est en fait un élément React , alors quel est l'équivalent pour [~ # ~] dom [~ # ~ ] élément?
PropTypes.instanceOf(Element)
Travaille pour moi. Vous pouvez également ajouter isRequired:
PropTypes.instanceOf(Element).isRequired
Vous pouvez vérifier si la propriété passée est une instance de Element
:
L'interface Element représente un objet d'un document. Cette interface décrit les méthodes et propriétés communes à toutes sortes d'éléments. Des comportements spécifiques sont décrits dans les interfaces qui héritent d'Element mais ajoutent des fonctionnalités supplémentaires. Par exemple, l'interface HTMLElement est l'interface de base pour les éléments HTML, tandis que l'interface SVGElement est la base de tous les éléments SVG.
class Some extends React.Component {
render() {
return (
<div> Hello </div>
);
}
}
const validateDOMElem = (props, propName, componentName) => {
if (props[propName] instanceof Element === false) {
return new Error(
'Invalid prop `' + propName + '` supplied to' +
' `' + componentName + '`. Validation failed.'
);
}
}
Some.propTypes = {
htmlElem: validateDOMElem,
};
const para = document.getElementById('para');
ReactDOM.render(<Some htmlElem={para} />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<div id="app"></div>
<p id="para"></p>
Par exemple avec un composant de liste:
MyList.propTypes = {
children: PropTypes.instanceOf(<li></li>),
}
Travaille pour moi.