「前端React框架」PropTypes提供的验证器

简介: 用技术实现梦想,用梦想打开创意之门。分享一波前端React框架中PropTypes提供的验证器的知识点。

前言


通常,我们在项目中使用自定义组件时,需要对组件的props进行类型检测。而React提供了专门的库,可以校验组件的props类型,也可以做一些特定的限制。下面行详细介绍。


以下内容大部分来自[React官网](https://zh-hans.reactjs.org/docs/typechecking-with-proptypes.html#gatsby-focus-wrapper),根据我的开发经验进行了补充。


如何使用


项目中安装prop-types

npminstallprop-types--save

页面引入

importPropTypesfrom'prop-types';

使用


在需要加入类型校验的组件中引入prop-types,并对需要类型校验的props属性添加类型验证器。

/** * @description Switch 开关组件 */importReactfrom'react';
importPropTypesfrom'prop-types';
constSwitch= ({ ...props }) => {
return<div>{props.children}</div>;};
Switch.propTypes= {
color: PropTypes.string, // 开关颜色loading: PropTypes.bool, // 是否为加载状态};
exportdefaultSwitch;

eslint校验


如果项目中加入了eslint校验,可以设置不强制使用prop-types,将react/prop-types项设置为0即可。

module.exports= {
rules: {
// 不强制使用prop-types'react/prop-types': 0,
  },
};

propTypes提供的验证器


原生类型


可以将属性声明为 JS 原生类型,默认情况下这些属性都是可选的。

Switch.propTypes= {
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
};

任何可被渲染的元素


包括数字、字符串、元素、数组、Fragment等。

Switch.propTypes= {
optionalNode: PropTypes.node,
};

一个 React 元素


React 元素,指React.CreateElement生成的元素。

可以通过 PropTypes.element 来确保传递给组件的 children 中只包含一个元素。

/** * @description Switch 开关 */importReactfrom'react';
importPropTypesfrom'prop-types';
constSwitch= ({ ...props }) => {
// 这必须只有一个元素,否则控制台会打印警告。constchildren=props.children;
return<div>{children}</div>;};
Switch.propTypes= {
children: PropTypes.element,
};
exportdefaultSwitch;

多种类型


一个对象可以是几种类型中的任意一个类型。


方法oneOfType接收的参数是数组,设置的不同类型用逗号分开。

Switch.propTypes= {
optionalUnion: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
};

限定值


可以让 props只能是特定的值,指定它为枚举类型.


方法oneOf接收的参数是数组,设置的特定值用逗号分开。

Switch.propTypes= {
optionalEnum: PropTypes.oneOf(['News', 'Photos']),
};

类的实例


使用JS 的 instanceof 操作符声明 prop 为类的实例。


注:指定的类不能是自定义的React类。

// 正确代码Switch.propTypes= {
optionalArray: PropTypes.instanceOf(Array),
};
// 报错代码// 指定的类不能是自定义的React类,否则代码会报错:Invalid prop `optionalArray` of type `Object` supplied to `Loading`, expected instance of `Custom`.Switch.propTypes= {
optionalArray: PropTypes.instanceOf(Custom),
};

参数必传限制


如果想设置某项prop为必须的,可以在任何 PropTypes 属性后面加上 `isRequired`,这个 prop 没有被提供时,会打印警告信息。

Switch.propTypes= {
requiredFunc: PropTypes.func.isRequired,
};

任意类型


也可以设置任意类型,使用any声明任意类型。


实际开发中声明任意的意义不大,因为propTypes本身就是非必须的,声明任意和不做任何声明是一样的。但是有些情况,我们又想给某些参数设置必填校验,但是这类参数的校验类型又不想设置的特别局限,就可以把any和isRequired结合使用,这种组合校验在实际开发中也经常用到。

// 任意类型Switch.propTypes= {
optionalAny: PropTypes.any,
};
// 任意类型的必需数据Switch.propTypes= {
requiredAny: PropTypes.any.isRequired,
};

其他类型


以下几种类型我日常用到的相对较少,所以直接将React文档里的内容复制出来。如果有大佬愿意分享,欢迎留言💐

Switch.propTypes= {
// 可以指定一个数组由某一类型的元素组成optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
// 可以指定一个对象由某一类型的值组成optionalObjectOf: PropTypes.objectOf(PropTypes.number),
// 可以指定一个对象由特定的类型值组成optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number,
  }),
// 可以指定一个对象由具有额外属性警告值组成optionalObjectWithStrictShape: PropTypes.exact({
name: PropTypes.string,
quantity: PropTypes.number,
  }),
};

默认 Prop 值


可以通过配置特定的 defaultProps 属性来定义 props 的默认值。

// 开关组件,默认字体颜色为#c9c9c9 默认是否有加载效果为不加载Switch.defaultProps= {
color: '#c9c9c9',
loading: false,
};

结束


PropTypes在项目的频率相对较高,尤其是我们在自定义组件的时候,props添加类型校验也是非常好的编程习惯。所以我把PropTypes的知识点和日常使用的实例结合起来放到文章中,也当成自己的一遍知识点笔记,方便日后查阅。

目录
相关文章
|
7月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
680 1
|
8月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
496 83
|
8月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
529 70
|
8月前
|
JavaScript 前端开发 API
|
资源调度 前端开发 Android开发
如何在 React Native 中进行代码签名验证?
如何在 React Native 中进行代码签名验证?
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
262 9
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
2342 39
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
10月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
497 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
837 9
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
前端开发 JavaScript API
前端界的秘密武器:掌握这些框架,让你轻松秒杀99%的同行!
前端开发日新月异,掌握几个明星框架如React、Vue.js和Angular,不仅能让工作更得心应手,还能轻松超越同行。React以高效的虚拟DOM和组件化著称;Vue.js简洁易懂,灵活性高;Angular提供全面的解决方案,适合大型应用。此外,轻量级的Svelte也值得关注,其编译时处理设计提升了应用性能。掌握这些框架,结合深刻理解和灵活运用,助你在前端领域脱颖而出。
218 9