proptypes介紹


開始

prop-types的主要作用:對props中數據類型進行檢測及限制

引用方法:import PropTypes from 'prop-types'

用法:

// 基本用法 用來檢測數據類型
componentsName.PropTypes = {
    參數變量: PropTypes.類型
}
// 例子
myComponents.PropTypes = {
    name: Proptypes.string
}

 

(官方文檔原例)

  1. 指定基本數據類型
 

  1. MyComponent.propTypes = {
        // 你可以將屬性聲明為以下 JS 原生類型
        optionalArray: PropTypes.array,
        optionalBool: PropTypes.bool,
        optionalFunc: PropTypes.func,
        optionalNumber: PropTypes.number,
        optionalObject: PropTypes.object,
        optionalString: PropTypes.string,
        optionalSymbol: PropTypes.symbol,
    }
    檢

     

    測是不是能被渲染的元素,function就不能被渲染
MyComponent.propTypes = {
 // 任何可被渲染的元素(包括數字、字符串、子元素或數組)。
  optionalNode: PropTypes.node,   
}

 

  1. 檢測是否是原型的實例
MyComponent.propTypes = {
    optionalMessage: PropTypes.instanceOf(Message),
}

 

  1. 限制特定的內容——只能是news或者photos
MyComponent.propTypes = {
    // 你也可以限制你的屬性值是某個特定值之一
    optionalEnum: PropTypes.oneOf(['News', 'Photos']),
}

 

  1. 在一定范圍內的類型——可以是string,number,實例
MyComponent.propTypes = {
    // 限制它為列舉類型之一的對象
    optionalUnion: PropTypes.oneOfType([
        PropTypes.string,
        PropTypes.number,
        PropTypes.instanceOf(Message)
    ]),
}

 

  1. 指定所有內容類型的數組——數組所有內容必須都是number類型
MyComponent.propTypes = {
   // 一個指定元素類型的數組
  optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
}

 

  1. 指定元素類型的對象——對象的內容必須都是number
MyComponent.propTypes = {
    // 一個指定類型的對象
    optionalObjectOf: PropTypes.objectOf(PropTypes.number),
}

 

  1. 指定屬性及類型的對象——color必須是string 類型,fontSize是number類型
MyComponent.propTypes = {
    // 一個指定屬性及其類型的對象
    optionalObjectWithShape: PropTypes.shape({
     color: PropTypes.string,
     fontSize: PropTypes.number
    }),
}

 

  1. 檢測內容是否存在——沒有的話會打印警告信息
MyComponent.propTypes = {
    // 你也可以在任何 PropTypes 屬性后面加上 `isRequired` 
    // 后綴,這樣如果這個屬性父組件沒有提供時,會打印警告信息
    requiredFunc: PropTypes.func.isRequired,

}

 

  1. 任意數據類型——隨意類型都可以,但是內容要存在
MyComponent.propTypes = {
    // 任意類型的數據
    requiredAny: PropTypes.any.isRequired,

}

 

  1. 自定義驗證器
MyComponent.propTypes = {
   // 你也可以指定一個自定義驗證器。它應該在驗證失敗時返回
  // 一個 Error 對象而不是 `console.warn` 或拋出異常。
  // 不過在 `oneOfType` 中它不起作用。
  customProp: function(props, propName, componentName) {
    if (!/matchme/.test(props[propName])) {
      return new Error(
        'Invalid prop `' + propName + '` supplied to' +
        ' `' + componentName + '`. Validation failed.'
      );
    }
  },
    // 不過你可以提供一個自定義的 `arrayOf` 或 `objectOf` 
  // 驗證器,它應該在驗證失敗時返回一個 Error 對象。 它被用
  // 於驗證數組或對象的每個值。驗證器前兩個參數的第一個是數組
  // 或對象本身,第二個是它們對應的鍵。
  customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
    if (!/matchme/.test(propValue[key])) {
      return new Error(
        'Invalid prop `' + propFullName + '` supplied to' +
        ' `' + componentName + '`. Validation failed.'
      );
    }
  })
}

 

  1. element元素——1.是一個react元素 2.檢測元素是否存在並且是個單個的子代
// 是一個react元素
MyComponent.propTypes = {
  optionalElement: PropTypes.element,
}
// 檢測是否是個單個的子代
MyComponent.propTypes = {
  optionalElement: PropTypes.element.isRequired,
}

 

  1. 屬性默認值——添加默認值
class Greeting extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}

// 為屬性指定默認值:
Greeting.defaultProps = {
  name: 'Stranger'
};

// 渲染 "Hello, Stranger":
ReactDOM.render(
  <Greeting />,
  document.getElementById('example')
);

// 另外一種設置默認值的方法
static defaultProps = {
    name: 'stranger'
  }

 



作者:TianYiYang
鏈接:https://www.jianshu.com/p/d1207c6edc61
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM