Prop 验证

随着应用不断变大,保证组件被正确使用变得非常有用。为此我们引入propTypesReact.PropTypes 提供很多验证器 (validator) 来验证传入数据的有效性。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。注意为了性能考虑,只在开发环境验证 propTypes。下面用例子来说明不同验证器的区别:

 1 React.createClass({
 2   propTypes: {
 3     // 可以声明 prop 为指定的 JS 基本类型。默认
 4     // 情况下,这些 prop 都是可传可不传的。
 5     optionalArray: React.PropTypes.array,
 6     optionalBool: React.PropTypes.bool,
 7     optionalFunc: React.PropTypes.func,
 8     optionalNumber: React.PropTypes.number,
 9     optionalObject: React.PropTypes.object,
10     optionalString: React.PropTypes.string,
11 
12     // 所有可以被渲染的对象:数字,
13     // 字符串,DOM 元素或包含这些类型的数组。
14     optionalNode: React.PropTypes.node,
15 
16     // React 元素
17     optionalElement: React.PropTypes.element,
18 
19     // 用 JS 的 instanceof 操作符声明 prop 为类的实例。
20     optionalMessage: React.PropTypes.instanceOf(Message),
21 
22     // 用 enum 来限制 prop 只接受指定的值。
23     optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),
24 
25     // 指定的多个对象类型中的一个
26     optionalUnion: React.PropTypes.oneOfType([
27       React.PropTypes.string,
28       React.PropTypes.number,
29       React.PropTypes.instanceOf(Message)
30     ]),
31 
32     // 指定类型组成的数组
33     optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
34 
35     // 指定类型的属性构成的对象
36     optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),
37 
38     // 特定形状参数的对象
39     optionalObjectWithShape: React.PropTypes.shape({
40       color: React.PropTypes.string,
41       fontSize: React.PropTypes.number
42     }),
43 
44     // 以后任意类型加上 `isRequired` 来使 prop 不可空。
45     requiredFunc: React.PropTypes.func.isRequired,
46 
47     // 不可空的任意类型
48     requiredAny: React.PropTypes.any.isRequired,
49 
50     // 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接
51     // 使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。
52     customProp: function(props, propName, componentName) {
53       if (!/matchme/.test(props[propName])) {
54         return new Error('Validation failed!');
55       }
56     }
57   },
58   /* ... */
59 });
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-05
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
  • 2021-09-04
  • 2021-08-26
相关资源
相似解决方案