2017-02-19 5 views
0

要素タイプを構成可能にするコンポーネントを作成しています。コンポーネントまたは要素の正しいPropTypeは何ですか

const Col = ({ containerElement, children }) => { 
    return (
    <containerElement> 
     {children} 
    </containerElement> 
); 
}; 

Col.defaultProps = { 
    containerElement: 'div' 
}; 

コンテナ要素は、上記のdefaultPropsのようにすることも、コンポーネントにすることもできます。

Col.propTypes = { 
    className: PropTypes.string, 
    containerElement: PropTypes.oneOf([ 
    PropTypes.string, 
    PropTypes.element 
    ]), 

をしかし、それは正しく検証しない:

<Col containerElement={<MyComponent} /> 

私が検証するpropTypesを得ることができない、私はこれを試してみました。

警告:失敗しましたpropType:Colに供給された値div の無効な小道具componentClass

+0

正確にコンポーネントに渡していますか?値が本当に要素の場合は、とにかく ''として使用することはできません。 ''は 'React.createElement( 'containerElement'、...)'の構文的な砂糖です。文字列であっても、 'containerElement'は* variable * 'containerElement'ではなく' React.createElement'に渡されます。検証エラーについて心配する前に、コード自体が正しい結果(つまり正常に動作する)を生成することを確認します。 –

答えて

1

あなたのコンポーネントに定義されたcomponentClass性質を持っていない - あなたの小道具をcontainerElementと呼ばれ、あなたはoneOfTypeを使用する必要があります:

Col.propTypes = { 
    className: PropTypes.string, 
    containerElement: PropTypes.oneOfType([ 
    PropTypes.string, 
    PropTypes.element 
    ]) 
+0

それは間違いありませんが、私はこれが検証問題を解決するとは思わない。 –

+0

それは私のタイプミスでした。正しい名前では、まだ検証に失敗します。 – dagda1

関連する問題