1. 程式人生 > >【06】react 之 PropsType

【06】react 之 PropsType

nod document 元素 pre ace ont 道具 def reat

React組件創建的時候,需要傳入屬性,我們可以使用使用PropTypes進行類型檢查,您可以使用React.PropTypes在組件的道具上運行。

React.PropTypes.array 

React.PropTypes.bool

React.PropTypes.func

React.PropTypes.number

React.PropTypes.object

React.PropTypes.string

React.PropTypes.symbol

React.PropTypes.node

React.PropTypes.element

React.PropTypes.instanceOf()

React.PropTypes.oneOf()

React.PropTypes.oneOfType()

React.PropTypes.arrayOf()

React.PropTypes.objectOf()

React.PropTypes.shape()

React.PropTypes.any

默認情況下,驗證器將props視為可選屬性。您可以使用isRequired確保在未提供道具時顯示警告。

 React.createClass({

  propTypes: {

    // 可以聲明 prop 為指定的 JS 基本類型。默認

    // 情況下,這些 prop 都是可傳可不傳的。

    optionalArray: React.PropTypes.array,

    optionalBool: React.PropTypes.bool,

    optionalFunc: React.PropTypes.func,

    optionalNumber: React.PropTypes.number,

    optionalObject: React.PropTypes.object,

    optionalString: React.PropTypes.string,

    // 所有可以被渲染的對象:數字,

    // 字符串,DOM 元素或包含這些類型的數組。

    optionalNode: React.PropTypes.node,

    // React 元素

    optionalElement: React.PropTypes.element,

    // 用 JS 的 instanceof 操作符聲明 prop 為類的實例。

    optionalMessage: React.PropTypes.instanceOf(Message),

    // 用 enum 來限制 prop 只接受指定的值。

    optionalEnum: React.PropTypes.oneOf([‘News‘, ‘Photos‘]),

    // 指定的多個對象類型中的一個

    optionalUnion: React.PropTypes.oneOfType([

      React.PropTypes.string,

      React.PropTypes.number,

      React.PropTypes.instanceOf(Message)

    ]),

    // 指定類型組成的數組

    optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),

    // 指定類型的屬性構成的對象

    optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),

    // 特定形狀參數的對象

    optionalObjectWithShape: React.PropTypes.shape({

      color: React.PropTypes.string,

      fontSize: React.PropTypes.number

    }),

    // 以後任意類型加上 `isRequired` 來使 prop 不可空。

    requiredFunc: React.PropTypes.func.isRequired,

    // 不可空的任意類型

    requiredAny: React.PropTypes.any.isRequired,

    // 自定義驗證器。如果驗證失敗需要返回一個 Error 對象。不要直接

    // 使用 `console.warn` 或拋異常,因為這樣 `oneOfType` 會失效。

    customProp: function(props, propName, componentName) {

      if (!/matchme/.test(props[propName])) {

        return new Error(‘Validation failed!‘);

      }

    }

  },

  /* ... */

});

或者

    MyComponent.propTypes = {

        name:React.PropTypes.string

};

es6

class InputControlES6 extends React.Component {
      constructor(props) {
          super(props);
          // 設置 initial state
          this.state = {
              text: props.initialValue || ‘placeholder‘
          };
          // ES6 類中函數必須手動綁定
          this.handleChange = this.handleChange.bind(this);
      }
      handleChange(event) {
          this.setState({
              text: event.target.value
          });
            console.log(this.state.text);
      }
      render() {
          return (
              <div>
                  Type something:
                  <input onChange={this.handleChange}
                value={this.state.text} />
              </div>
          );
      }
}
InputControlES6.propTypes = {
    initialValue: React.PropTypes.string
};
InputControlES6.defaultProps = {
    initialValue: ‘‘
};
ReactDOM.render(<InputControlES6/>,document.getElementById(‘example‘))

【06】react 之 PropsType