React 校验库 prop-types 安装与详细使用

简介: React 校验库 prop-types 安装与详细使用

一、简介与安装

  • React.PropTypesReact v15.5 起已弃用。后续使用 prop-types 库代替,出于性能考虑,propTypes 只在开发模式下进行检查,也就只需要安装到开发环境即可。
  • yarn 安装
$ yarn add prop-types
  • npm 安装
$ npm i prop-types -D

二、使用

  • 引入使用
import PropTypes from 'prop-types';
  • 使用方式
组件名.PropTypes = {
    组件属性:校验格式,
    list:PropTypes.array
}
  • 报错案例
import React from "react";
import PropTypes from 'prop-types';
function Sub (props) {
  return (
    <div>子组件</div>
  )
}
class App extends React.Component {
  render () {
    return (
      <div>
        {/* 传入的不是数组,会报错 */}
        <Sub list={2}></Sub>
      </div>
    )
  }
}
// 给组件 Sub 的属性定义校验规则
Sub.propTypes = {
  // 指定 list 数据必须为数组
  list: PropTypes.array
}
export default App
  • 成功案例
import React from "react";
import PropTypes from 'prop-types';
function Sub (props) {
  return (
    <>
      <div>子组件</div>
      { props.list.map((item, index) => <p key={index}>{item}</p>) }
    </>
  )
}
class App extends React.Component {
  render () {
    return (
      <div>
        {/* 传入的不是数组,会报错 */}
        <Sub list={[1, 2, 3]}></Sub>
      </div>
    )
  }
}
// 给组件 Sub 的属性定义校验规则
Sub.propTypes = {
  // 指定 list 数据必须为数组
  list: PropTypes.array
}
export default App

三、支持的校验规则

MyComponent.propTypes = {
  // 可以声明 prop 为指定的 JS 基本数据类型,默认情况,这些数据是可选的
  myPropArray: React.PropTypes.array,
  myPropBool: React.PropTypes.bool,
  myPropFunc: React.PropTypes.func,
  myPropNumber: React.PropTypes.number,
  myPropObject: React.PropTypes.object,
  myPropString: React.PropTypes.string,
  // 可以被渲染的对象 numbers, strings, elements 或 array
  myPropNode: React.PropTypes.node,
  //  React 元素
  myPropElement: React.PropTypes.element,
  // 用 JS 的 instanceof 操作符声明 prop 为类的实例。
  myPropMessage: React.PropTypes.instanceOf(Message),
  // 用 enum 来限制 prop 只接受指定的值。
  myPropEnum: React.PropTypes.oneOf(['News', 'Photos']),
  // 可以是多个对象类型中的一个
  myPropUnion: React.PropTypes.oneOfType([
    React.PropTypes.string,
    React.PropTypes.number,
    React.PropTypes.instanceOf(Message)
  ]),
  // 指定类型组成的数组
  myPropArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
  // 指定类型的属性构成的对象
  myPropObjectOf: React.PropTypes.objectOf(React.PropTypes.number),
  // 特定 shape 参数的对象
  myPropObjectWithShape: React.PropTypes.shape({
    color: React.PropTypes.string,
    fontSize: React.PropTypes.number
  }),
    // 任意类型加上 `isRequired` 来使 prop 不可空。
    myPropFunc: React.PropTypes.func.isRequired,
    // 不可空的任意类型
    myPropAny: React.PropTypes.any.isRequired,
    // 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。
    myCustomProp: function(props, propName, componentName) {
    if (!/matchme/.test(props[propName])) {
      return new Error('Validation failed!');
    }
    }
}
相关文章
|
6月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
121 0
|
1月前
|
前端开发 JavaScript API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
114 4
React开发需要了解的10个库
|
1月前
|
资源调度 前端开发 JavaScript
React中classnames库使用
【10月更文挑战第7天】
|
1月前
|
前端开发 JavaScript CDN
React 安装(CDN)
10月更文挑战第6天
44 2
|
1月前
|
资源调度 前端开发 JavaScript
React 安装(NPM)
10月更文挑战第6天
59 1
|
18天前
|
资源调度 前端开发 JavaScript
React 测试库 React Testing Library
【10月更文挑战第22天】本文介绍了 React Testing Library 的基本概念和使用方法,包括安装、基本用法、常见问题及解决方法。通过代码案例详细解释了如何测试 React 组件,帮助开发者提高应用质量和稳定性。
29 0
|
1月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
279 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
2月前
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
54 10
React技术栈-react使用的Ajax请求库实战案例
|
2月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
32 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
2月前
|
前端开发 JavaScript
React配合axios请求拦截校验session,403跳转至登陆页面
React中使用axios进行请求拦截,通过自定义事件监听和响应拦截实现403状态码时的自动登录页面跳转。
83 2