2016-09-08 62 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>), 
} 

爲我工作。