Как пометить свойство как элемент DOM?React PropTypes Элемент DOM?
This page говорит, что PropTypes.element
фактически Реагировать элемент, так что эквивалент для DOM элемента?
Как пометить свойство как элемент DOM?React PropTypes Элемент DOM?
This page говорит, что PropTypes.element
фактически Реагировать элемент, так что эквивалент для DOM элемента?
Вы можете проверить, если передаваемое свойство экземпляр Element
:
Интерфейс Element представляет собой объект документа. Этот интерфейс описывает методы и свойства, общие для всех типов элементов. Конкретные поведения описаны в интерфейсах, которые наследуют от Element, но добавляют дополнительные функциональные возможности. Например, интерфейс HTMLElement является базовым интерфейсом для элементов HTML, а интерфейс SVGElement является основой для всех элементов 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>
Также возможно не создавать пользовательский валидатор и использовать 'PropTypes.instanceOf (Element)' –
Например с компонентом списка:
MyList.propTypes = {
children: PropTypes.instanceOf(<li></li>),
}
Работы для меня.
Вы имеете в виду тип элемента DOM? Проверка определенного типа может быть выполнена с помощью пользовательской проверки проверки против 'someNode.constructor.name'. –
@MatthewHerbst Нет, я имею в виду * любой * элемент DOM. 'div',' span', 'input', что угодно. – mpen
'React.PropTypes.node'? – elmeister