PropTypes

propTypes 允許你指定元件需要的 props 以及它們應該是什麼型別。你的元件無需設定 propTypes 即可工作,但最好定義這些元件,因為它會使你的元件更具可讀性,作為正在閱讀元件的其他開發人員的文件,在開發過程中,如果你嘗試使用 React,它會發出警告設定一個與你為其設定的定義不同的道具。

一些原始的 propTypes 和通常可用的 propTypes 是 -

  optionalArray: React.PropTypes.array,
  optionalBool: React.PropTypes.bool,
  optionalFunc: React.PropTypes.func,
  optionalNumber: React.PropTypes.number,
  optionalObject: React.PropTypes.object,
  optionalString: React.PropTypes.string,
  optionalSymbol: React.PropTypes.symbol

如果將 isRequired 附加到任何 propType,則必須在建立該元件的例項時提供該 prop。如果你未提供所需的 propTypes,則無法建立元件例項。

句法

ES5

var MyClass = React.createClass({
  propTypes: {
    randomObject: React.PropTypes.object,
    callback: React.PropTypes.func.isRequired,
    ...
  }
}

ES6

class MyClass extends React.Component {...}
  
MyClass.propTypes = {
    randomObject: React.PropTypes.object,
    callback: React.PropTypes.func.isRequired,
    ...
};

ES7

class MyClass extends React.Component {  
     static propTypes = {
        randomObject: React.PropTypes.object,
        callback: React.PropTypes.func.isRequired,
        ...
    };
}

更復雜的道具驗證

同樣,PropTypes 允許你指定更復雜的驗證

驗證物件

...
    randomObject: React.PropTypes.shape({
        id: React.PropTypes.number.isRequired,
        text: React.PropTypes.string,
    }).isRequired,
...

驗證物件陣列

...
    arrayOfObjects: React.PropTypes.arrayOf(React.PropTypes.shape({
        id: React.PropTypes.number.isRequired,
        text: React.PropTypes.string,
    })).isRequired,
...