React-propTypes理解
【摘要】 React-propTypes理解
React-propTypes理解和使用
👉认识
propTypes 是 React 中的一种用于类型检查的机制,用于验证组件的props是否符合预期类型,也就是我们认为的传入的参数类型是否正确。
最初作为 React 的一部分在 React 0.14 版本中引入的
直到 React 15.5 版本,React 团队将 propTypes 移到一个独立的包中,并且开始鼓励开发者通过安装 prop-types 包来使用它
👉安装使用
🍆使用步骤
1. 安装包 prop-types(yarn add prop-types/ npmi props-types)
2. 导入 prop-types包
3. 使用组件名.propTypes=来给组件的props添加校验规则
上面的部分其实就是我们propTypes的代码和写法:
// 完整写法
import PropTypes from 'prop-types';
const App = ({ colors }) => {
// 你的组件代码
return (
<div>
{colors.map((color, index) => (
<p key={index} style={{ color }}>
{color}
</p>
))}
</div>
);
};
App.propTypes = {
colors: PropTypes.array.isRequired, // 定义 colors 必须是数组类型并且是必需的
};
export default App;
👉错误提示
我们简单看一下下面的代码错误的时候给我们的错误提示:
// 完整写法
import PropTypes from 'prop-types';
const App = ({ colors }) => {
// 你的组件代码
return (
<div>
{colors.map((color, index) => (
<p key={index} style={{ color }}>
{color}
</p>
))}
</div>
);
};
App.propTypes = {
colors: PropTypes.array.isRequired, // 定义 colors 必须是数组类型并且是必需的
};
export default App;
错误写法时候给我们的提示
import PropTypes from 'prop-types';
function App(props) {
return (
<h1>Hi, {props.colors}</h1>
);
}
// 定义propTypes
App.propTypes = {
// 约定colors属性为array类型
// 如果类型不对,则报出明确错误,便于分析错误原因
colors: PropTypes.array
};
export default App;
这个时候给我们的提示

👉 常见propTypes约束
- 常见类型:array、bool、func、number、object、string
- React元素类型:element
- 必填项:isRequired
- 特定结构的对象:shape(())
👉写法
// 常见类型
// 可选函数
optionalFunc: PropTypes.func,
// 必选函数
requiredFunc: PropTypes.func.isRequired,
// 特定结构的对象
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
})
👉完整类型
约束地址
| PropType | 描述 |
|---|---|
PropTypes.string |
字符串类型 |
PropTypes.number |
数字类型 |
PropTypes.bool |
布尔类型 |
PropTypes.array |
数组类型 |
PropTypes.object |
对象类型 |
PropTypes.func |
函数类型 |
PropTypes.node |
任意可渲染的内容(比如:字符串、数字、React 元素、数组等) |
PropTypes.element |
React 元素类型 |
PropTypes.instanceOf(Class) |
验证值是否为某个类的实例 |
PropTypes.oneOf([value1, value2, ...]) |
验证值是否为指定的某一个值 |
PropTypes.oneOfType([type1, type2, ...]) |
验证值是否匹配多个类型中的任意一个 |
PropTypes.arrayOf(type) |
验证数组中的每一项是否符合指定类型 |
PropTypes.objectOf(type) |
验证对象的每个值是否符合指定类型 |
PropTypes.shape({}) |
验证对象的属性是否符合指定类型 |
PropTypes.any |
任意类型 |
👉案例
import React from 'react';
import PropTypes from 'prop-types';
import ReactDOM from 'react-dom';
const App = (props) => {
return (
<div>
<h1>props 校验:</h1>
</div>
);
};
// 添加 props 校验
App.propTypes = {
a: PropTypes.number, // 属性 a 的类型:数值 (number)
fn: PropTypes.func.isRequired, // 属性 fn 的类型:函数 (func) 并且为必填项
tag: PropTypes.element, // 属性 tag 的类型:React 元素 (element)
filter: PropTypes.shape({ // 属性 filter 的类型:对象
area: PropTypes.string,
price: PropTypes.number,
}),
};
ReactDOM.render(<App />, document.getElementById('root'));
👉默认值defaultProps
有时候我们需要一些默认值,当父组件没有传递 props 时,我们使用默认值defaultProps。
场景:分页组件每页显示条数
作用:给props设置默认值,在未传入props时生效
import React from 'react';
import ReactDOM from 'react-dom';
function App(props) {
return (
<div>
此处展示props的默认值:{props.pagesize}
</div>
);
}
// 设置默认值
App.defaultProps = {
pagesize: 10, // 默认值为 10
};
ReactDOM.render(<App />, document.getElementById('root'));
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者

评论(0)