logo头像
Snippet 博客主题

React属性确认

为了代码高效运行,属性确认仅在开发环境中有效,也就是说在生产环境不做属性确认的校验; 将属性确认放在组件类定义结束后。下面是属性确认的语法。

一、属性执行类型

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, // Number
object: PropTypes.object, // 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
};