使用 PropTypes 进行类型检查

注意: 从 React v15.5 开始 ,React.PropTypes 助手函数已被弃用,建议使用 prop-types 库 来定义contextTypes


1

2

3

4

5

6

7

8

9

10

11

12

13

import PropTypes from ‘prop-types‘;

class Greeting extends React.Component {

  render() {

    return (

      <h1>Hello, {this.props.name}</h1>

    );

  }

}

Greeting.propTypes = {

  name: PropTypes.string

};

PropTypes

这里是一个示例记录提供的不同的验证器:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

import PropTypes from ‘prop-types‘;

MyComponent.propTypes = {

  // 你可以声明一个 prop 是一个特定的 JS 原始类型。

  // 默认情况下,这些都是可选的。

  optionalArray: PropTypes.array,

  optionalBool: PropTypes.bool,

  optionalFunc: PropTypes.func,

  optionalNumber: PropTypes.number,

  optionalObject: PropTypes.object,

  optionalString: PropTypes.string,

  optionalSymbol: PropTypes.symbol,

  // 任何东西都可以被渲染:numbers, strings, elements,或者是包含这些类型的数组(或者是片段)。

  optionalNode: PropTypes.node,

  // 一个 React 元素。

  optionalElement: PropTypes.element,

  // 你也可以声明一个 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

  }),

  // 你可以使用 `isRequired‘ 链接上述任何一个,以确保在没有提供 prop 的情况下显示警告。

  requiredFunc: PropTypes.func.isRequired,

  // 任何数据类型的值

  requiredAny: PropTypes.any.isRequired,

  // 你也可以声明自定义的验证器。如果验证失败返回 Error 对象。不要使用 `console.warn` 或者 throw ,

  // 因为这不会在 `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.‘

      );

    }

  })

};

要求单独的 Child

使用 PropTypes.element ,可以指定仅将单一子元素传递给组件,作为子节点。

默认的 prop 值

可以通过赋值特定的 defaultProps 属性为 props 定义默认值:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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‘)

);

 

原文地址:https://www.cnblogs.com/cangqinglang/p/9077904.html

时间: 2024-08-30 13:18:04

使用 PropTypes 进行类型检查的相关文章

React 使用 PropTypes 进行类型检查

注意: React.PropTypes 自 React v15.5 起已弃用.请使用 prop-types 库代替. defaultProps 用来确保 this.props.name 在父组件没有特别指定的情况下,有一个初始值.类型检查发生在 defaultProps 赋值之后,所以类型检查也会应用在 defaultProps 上面. 出处:https://react.bootcss.com/react/docs/typechecking-with-proptypes.html 原文地址:ht

react的类型检查PropTypes自React v15.5起已弃用,请使用prop-types

最近使用React的类型检查PropTypes时,遇到错误:TypeError: Cannot read property 'array' of undefined 看了下自己的React版本:    "react": "^16.2.0",google搜了下,原来:react的类型检查PropTypes自React v15.5起已弃用,请使用prop-types使用方法参考: https://doc.react-china.org/docs/typechecking

React类型检查

类型检查 import PropTypes from 'prop-types' 类名==List List.propTypes = { list: PropTypes.array } // 默认值 List.defaultProps = { list:[] } props: 1.只读不能修改(不能再赋值表达式左边) 2.ComponentWillReceiveProp() 3.propTypes 4. defaultProps 5.children web > native native 需要下

javascript函数参数、返回值类型检查

实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.define('PERSON', function(p){    return p && p.type === 'person' && p.name;}); 定义函数:var addStr = Str(function(a, b){  return a + b;}, Str, St

Java中静态类型检查是如何进行的

以下内容来自维基百科,关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 以下代码是一个例子,理解了他,你会更好的理解Java静态类型检查是如何工作的. 代码示例 假定我们有如下类,A和B,B继承A. class A { A me() { return this; } public void doA(

关于C++类型检查的一点小挫折

 问题: 定义了一个float型数组Lut[],我让一个整型指针指向数组名int * Address=lut ; VS2008报错: error C2440: '=' : cannot convert from 'float [256]' to 'int * ' 疑问:貌似在我C语言中,不止一次听过数组名代表数组的首地址:为啥在C++面前就不好使了(PS C++严格类型检查or类型匹配): 详细解答时间查查资料便晓得喽!不能不说C++的严谨性:近期查到Reason后,会记录在此!

JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常

在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前的版本: 1 2 3 4 5 6 7 8 9 10 catch (IOException ex) {      logger.error(ex);      throw new MyException(ex.getMessage()); catch (SQLException ex) {      

Swift类型检查与转换

继承会发生在子类和父类中,如图所示,是一系列类的继承关系类图,Person是类层次结构中的根类,Student是Person的直接子类,Worker是Person的直接子类.这个继承关系类图的具体实现代码如下: class Person { var name : String var age : Int func description() -> String { return "\(name) 年龄是: \(age)" } convenience init () { self.

O-C相关-10-动态类型检查

10-动态类型检查 1.动态绑定 1)OC 中方法的调用不由编译器决定,而由运行时决定 2)OC 中没有方法调用,只有消息接收. 一般称消息为选择器 2.动态类型检查 对象在运行时获得类型的能力称为内省,如果在代码中想知道对象是否具有指定方法,可以使用: 1)判断类型或父类类型 -(BOOL)isKindOfClass:(Class)Obj 判断一个对象是不是有某个类或其子类实例化出来的对象 2)仅判断类型 -(BOOL)isMemberOfClass:(Class)obj 判断对象是不是被某个