2016-09-08 16 views
7

プロパティをDOM要素にする必要があるとマークするにはどうすればよいですか?React PropTypes DOM要素ですか?

This pagePropTypes.elementが実際に要素に反応するので、DOM要素の等価は何ですか?あると言いますか

+0

DOM要素の種類を意味しますか?特定の型のチェックは、 'someNode.constructor.name'に対してカスタムの小道具チェッカーで行うことができます。 –

+1

@MatthewHerbstいいえ、私は*どんな* DOM要素も意味します。 'div'、' span'、 'input'のようなものです。 – mpen

+0

'React.PropTypes.node'? – elmeister

答えて

5

渡されたプロパティがElementのインスタンスであるかどうかをチェックすることができます:

Elementインタフェースは、ドキュメントのオブジェクトを表します。このインタフェースは、すべての種類の要素に共通するメソッドとプロパティを記述します。特定の動作は、Elementを継承するが追加の機能を追加するインタフェースに記述されています。たとえば、HTML要素の基本インターフェイスはHTMLElementインターフェイスですが、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>), 
} 

作品。

関連する問題