日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

React使用PropTypes實現類型檢查功能_React

作者:碼農小菲 ? 更新時間: 2023-04-26 編程語言

使用 PropTypes 進行類型檢查

  • react 內置類型檢查功能
  • 要在組件的 props 上進行類型檢查,你只需配置特定的 propTypes 屬性
  • propTypes 僅在開發模式下進行檢查
import PropTypes from 'prop-types'
class Greeting extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}
Greeting.propTypes = {
 name: PropTypes.string
}
// 當傳入的 prop 值類型不正確時,JavaScript 控制臺將會顯示警告

PropTypes

   import PropTypes from 'prop-types';
   MyComponent.propTypes = {
    // 你可以將屬性聲明為 JS 原生類型,默認情況下
    // 這些屬性都是可選的。
    optionalArray: PropTypes.array,
    optionalBool: PropTypes.bool,
    optionalFunc: PropTypes.func,
    optionalNumber: PropTypes.number,
    optionalObject: PropTypes.object,
    optionalString: PropTypes.string,
    optionalSymbol: PropTypes.symbol,
    // 任何可被渲染的元素(包括數字、字符串、元素或數組)
    // (或 Fragment) 也包含這些類型。
    optionalNode: PropTypes.node,
    // 一個 React 元素。
    optionalElement: PropTypes.element,
    // 一個 React 元素類型(即,MyComponent)。
    optionalElementType: PropTypes.elementType,
    // 你也可以聲明 prop 為類的實例,這里使用
    // JS 的 instanceof 操作符。
    optionalMessage: PropTypes.instanceOf(Message),
    // 你可以讓你的 prop 只能是特定的值,指定它為
    // 枚舉類型。
    optionalEnum: PropTypes.oneOf(['News', 'Photos']),
    // 一個對象可以是幾種類型中的任意一個類型
    optionalUnion: PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.number,
      PropTypes.instanceOf(Message)
    ]),
    // 可以指定一個數組由某一類型的元素組成
    optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
    // 可以指定一個對象由某一類型的值組成
    optionalObjectOf: PropTypes.objectOf(PropTypes.number),
    // 可以指定一個對象由特定的類型值組成
    optionalObjectWithShape: PropTypes.shape({
      color: PropTypes.string,
      fontSize: PropTypes.number
    }),
    // An object with warnings on extra properties
    optionalObjectWithStrictShape: PropTypes.exact({
      name: PropTypes.string,
      quantity: PropTypes.number
    }),   
    // 你可以在任何 PropTypes 屬性后面加上 `isRequired` ,確保
    // 這個 prop 沒有被提供時,會打印警告信息。
    requiredFunc: PropTypes.func.isRequired,
    // 任意類型的數據
    requiredAny: PropTypes.any.isRequired,
    // 你可以指定一個自定義驗證器。它在驗證失敗時應返回一個 Error 對象。
    // 請不要使用 `console.warn` 或拋出異常,因為這在 `onOfType` 中不會起作用。
    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.'
        );
      }
    })
  };

限制單個元素

通過 PropTypes.element 來確保傳遞給組件的 children 中只包含一個元素

   import PropTypes from 'prop-types';
   class MyComponent extends React.Component {
     render() {
       // 這必須只有一個元素,否則控制臺會打印警告。
       const children = this.props.children;
       return (
         <div>
           {children}
         </div>
       );
     }
   }
   MyComponent.propTypes = {
     children: PropTypes.element.isRequired
   };

默認 Prop 值

可以通過配置特定的 defaultProps 屬性來定義 props 的默認值

class Greeting extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}
// 指定 props 的默認值:
Greeting.defaultProps = {
  name: 'Stranger'
};
// 渲染出 "Hello, Stranger":
ReactDOM.render(
  <Greeting />,
  document.getElementById('example')
);

defaultProps 用于確保 this.props.name 在父組件沒有指定其值時,有一個默認值。propTypes 類型檢查發生在 defaultProps 賦值后,所以類型檢查也適用于 defaultProps。

原文鏈接:https://blog.csdn.net/xbczrz/article/details/128939146

欄目分類
最近更新