为了代码高效运行,属性确认仅在开发环境中有效,也就是说在生产环境不做属性确认的校验; 将属性确认放在组件类定义结束后。下面是属性确认的语法。
一、属性执行类型
0x01 属性指定为 JavaScript 的基本数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { array: PropTypes.array, bool: PropTypes.bool, func: PropTypes.func, number: PropTypes.number, object: PropTypes.object, string: PropTypes.string, };
|
0x02 属性指定为 可渲染的节点
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { node: PropTypes.node, };
|
0x03 属性指定为 React元素
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { element: PropTypes.element, };
|
0x04 属性指定为 某个类的实例
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { instance: PropTypes.instanceOf(NameOfClass), };
|
0x05 属性指定为 取值为特定的某个值
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { value: PropTypes.oneOf(["value1", "value2"]), };
|
0x06 属性指定为 类型为集合内的某一个
1 2 3 4 5 6 7 8 9 10 11 12
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { value: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, PropTypes.instanceOf(NameOfClass) ]), };
|
0x07 属性指定为 指定类型的数组
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { value: PropTypes.arrayOf(PropTypes.number), };
|
0x08 属性指定为 有特定成员变量的对象
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { value: PropTypes.objectOf(PropTypes.number), };
|
0x09 属性指定为 指定构成方式的对象
1 2 3 4 5 6 7 8 9 10 11
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { object: PropTypes.shape({ color: PropTypes.string, fontSize: PropTypes.number }), };
|
0x10 属性指定为 任意类型
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { object: PropTypes.any, };
|
二、属性是否必须
当某个属性是必须的时候,可以在属性后面添加 isRequired 标记。
1 2 3 4 5 6 7 8
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { object: PropTypes.any.isRequired, };
|
三、属性默认值配置
自定义组件时,给组件属性设定默认值,当组件渲染时,如果没有指定某个属性值,则使用默认值。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import React from 'react'; import PropTypes from 'prop-types';
... 组件类定义 ...
ReactPropTypes.propTypes = { name: PropTypes.string, age: PropTypes.number, };
ReactPropTypes.defaultProps = { name: 'DefaultValue', age: 18 };
|