2017-01-23 47 views
49

我有一個組件接收一個道具的大小。道具可以是字符串或數字ex:"LARGE"17反應PropTypes:允許一種道具的不同類型的PropType

我可以讓React.PropTypes知道這可以是propTypes驗證中的一個或另一個嗎?

如果我不指定類型我得到一個警告:

prop type `size` is invalid; it must be a function, usually from React.PropTypes.

MyComponent.propTypes = { 
size: React.PropTypes 
} 

回答

146
size: PropTypes.oneOfType([ 
    PropTypes.string, 
    PropTypes.number 
]), 

瞭解更多:Typechecking With PropTypes

+0

感謝您的這一點,我得到隨機錯誤時運行我的Jest測試在我的類中設置靜態Proptypes:'ReferenceError:oneOfType未定義 - 任何建議?提前致謝!! –

+0

是否確定你已經正確地從'prop-types'導入了PropTypes;'? –

+0

hey there Pawel - 是的,這就是我們如何導入它們:'從'prop-types'中導入PropTypes;' –

1
import React from 'react';    <--as normal 
import PropTypes from 'prop-types';  <--add this as a second line 

    App.propTypes = { 
     monkey: PropTypes.string,   <--omit "React." 
     cat: PropTypes.number.isRequired <--omit "React." 
    }; 

    Wrong: React.PropTypes.string 
    Right: PropTypes.string 
+2

是的,PropTypes現在生活在它自己的包中,但是這並不回答這個問題... –

1

這可能爲你工作:

height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), 
+0

雖然這代碼可以回答這個問題,提供關於爲什麼和/或這個代碼如何回答這個問題提高了其長期價值的附加背景。 – rollstuhlfahrer

相關問題