2016-09-08 61 views
7

如何将一个属性标记为必须是DOM元素?React PropTypes DOM元素?

This pagePropTypes.element实际上是一个阵营元素,有啥为DOM元素相当于?

+0

您是指DOM元素的类型?检查特定的类型可以通过一个自定义的prop检查器对'someNode.constructor.name'完成。 –

+1

@MatthewHerbst不,我的意思是*任何* DOM元素。 'div','span','input',不管。 – mpen

+0

'React.PropTypes.node'? – elmeister

回答

5

您可以检查通过的财产是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>

+7

也可以不创建自定义验证程序并使用PropTypes.instanceOf(Element) –

1

例如与列表组件:

MyList.propTypes = { 
    children: PropTypes.instanceOf(<li></li>), 
} 

为我工作。