「前端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的知识点和日常使用的实例结合起来放到文章中,也当成自己的一遍知识点笔记,方便日后查阅。

目录
相关文章
|
3月前
|
资源调度 前端开发 Android开发
如何在 React Native 中进行代码签名验证?
如何在 React Native 中进行代码签名验证?
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
413 38
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
2月前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
3月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
252 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
3月前
|
存储 前端开发
在React框架中,如何使用对象来管理组件的状态
在React中,组件状态通过`state`对象管理,利用`setState`方法更新状态。状态变化触发组件重新渲染,实现UI动态更新。对象结构清晰,便于复杂状态管理。
|
3月前
|
前端开发 JavaScript API
前端界的秘密武器:掌握这些框架,让你轻松秒杀99%的同行!
前端开发日新月异,掌握几个明星框架如React、Vue.js和Angular,不仅能让工作更得心应手,还能轻松超越同行。React以高效的虚拟DOM和组件化著称;Vue.js简洁易懂,灵活性高;Angular提供全面的解决方案,适合大型应用。此外,轻量级的Svelte也值得关注,其编译时处理设计提升了应用性能。掌握这些框架,结合深刻理解和灵活运用,助你在前端领域脱颖而出。
44 9
|
3月前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
66 1
|
3月前
|
开发框架 前端开发 JavaScript
React 框架的优点和缺点是什么?
React框架作为当前主流的前端开发框架之一,具有诸多优点,同时也存在一些缺点
|
3月前
|
JavaScript 前端开发 算法
React 框架和 Vue 框架的区别是什么?
React框架和Vue框架都是目前非常流行的前端JavaScript框架,它们在很多方面存在区别
|
3月前
|
移动开发 前端开发 JavaScript
React框架
React是一个用于构建用户界面的JavaScript库,由Facebook开发并于2013年开源,目前在前端开发领域得到了广泛的应用。