📜  使用 PropTypes 进行 ReactJS 类型检查 – 第 3 组

📅  最后修改于: 2022-05-13 01:56:19.932000             🧑  作者: Mango

使用 PropTypes 进行 ReactJS 类型检查 – 第 3 组

在之前的文章ReactJS Typechecking With PropTypes – Set 2中,我们讨论了实例验证、单个和多个数据类型验证、类型和形状验证以及 props 中的精确验证。在本文中,我们将讨论传递任何东西的验证必需的验证和 props 的自定义验证

创建反应应用程序:

第 1 步:使用以下命令创建一个 React 应用程序:

npx create-react-app foldername

第 2 步:创建项目文件夹(即文件夹名称)后,使用以下命令移动到该文件夹:

cd foldername

所需模块:在使用 PropTypes 之前,我们必须通过在终端中输入给定的命令来安装它。

npm install prop-types --save

示例 1:在 props 中传递任何数据类型

我们可以使用此方法验证任何数据类型的 prop,无论是数字、字符串、符号、数组、对象等。这意味着我们可以将任何有效的数据类型作为组件内部的 props 传递。

App.js
import React, { Component } from 'react'
import PropTypes from 'prop-types'
  
// Component
class ProfitComponent extends Component {
  render() {
   return (
      
        {/* Printing the props */}          

          {this.props.goodsNo}          

         

          {this.props.goodsInfo}          

      
      )   } }    // Creating default props ProfitComponent.defaultProps = {    goodsNo: 67,    goodsInfo: "GeeksForGeeks" }    // Validating prop types ProfitComponent.propTypes = {    goodsNo: PropTypes.any,    goodsInfo: PropTypes.any }    export default ProfitComponent;


App.js
import React, { Component } from 'react'
import PropTypes from 'prop-types'
  
// Component
class ProfitComponent extends Component {
  render() {
   return (
      
        {/* Printing the props */}          

          {this.props.goodsNo}          

      
      )   } }    // Creating default props ProfitComponent.defaultProps = {    goodsNo: "GeeksForGeeks" }    // Validating prop types ProfitComponent.propTypes = {    goodsNo: PropTypes.number.isRequired }    export default ProfitComponent;


App.js
import React, { Component } from 'react'
  
// Component
class ProfitComponent extends Component {
  render() {
   return (
      
        {/* Printing the props */}          

          {this.props.goodsNo}          

      
      )   } }    // Creating default props ProfitComponent.defaultProps = {    goodsNo: 20 }    // Validating prop types ProfitComponent.propTypes = {    goodsNo(props, propName, component){      if(props[propName] < 100){         return new Error(`${propName} is smaller than 100`)      }    } }    export default ProfitComponent;


运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:

npm start

输出:现在打开浏览器并转到http://localhost:3000/ ,您将看到以下输出:

说明:您可以在上面的程序中看到,我们将名为goodsNo的道具作为数字传递,将goodsInfo作为字符串传递给类组件,并将它们都验证为任何数据类型。一切都在浏览器上完美呈现,并且没有出现警告消息。这清楚地告诉我们,任何值都可以在名为goodsNogoodsInfo的props 中传递,无论是字符串、数字、数组还是对象等。

示例 2:道具内部传递的数据的必需验证

我们可以验证是否提供了道具。为此,我们使用isRequired确保在未提供 prop 或其数据类型与指定类型不同时显示警告消息。

应用程序.js

import React, { Component } from 'react'
import PropTypes from 'prop-types'
  
// Component
class ProfitComponent extends Component {
  render() {
   return (
      
        {/* Printing the props */}          

          {this.props.goodsNo}          

      
      )   } }    // Creating default props ProfitComponent.defaultProps = {    goodsNo: "GeeksForGeeks" }    // Validating prop types ProfitComponent.propTypes = {    goodsNo: PropTypes.number.isRequired }    export default ProfitComponent;

运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:

npm start

输出:现在打开浏览器并转到http://localhost:3000/ ,您将看到以下输出:

说明:您可以在上面的程序中看到,我们将名为goodsNo的道具作为字符串传递,并在我们的道具中严格要求它作为数字。尽管如此,一切都在浏览器上完美呈现,但控制台中会出现一条警告消息。这清楚地告诉我们,名为goodsNo的道具严格要求数字值,但作为字符串传递。因此,我们得出结论, isRequired 方法只是验证 prop 中传递的数据的另一种方法。

示例 3:制作我们自己的 prop 验证函数或自定义验证

我们还可以指定我们自己的自定义验证或 prop 验证函数来检查哪些数据必须作为 props 在我们的组件内传递。如果验证失败,它会返回一个错误对象作为警告消息。

应用程序.js

import React, { Component } from 'react'
  
// Component
class ProfitComponent extends Component {
  render() {
   return (
      
        {/* Printing the props */}          

          {this.props.goodsNo}          

      
      )   } }    // Creating default props ProfitComponent.defaultProps = {    goodsNo: 20 }    // Validating prop types ProfitComponent.propTypes = {    goodsNo(props, propName, component){      if(props[propName] < 100){         return new Error(`${propName} is smaller than 100`)      }    } }    export default ProfitComponent;

运行应用程序的步骤:从项目的根目录使用以下命令运行应用程序:

npm start

输出:现在打开浏览器并转到http://localhost:3000/ ,您将看到以下输出:

解释:您可以在上面的程序中看到,我们将名为goodsNo的道具作为一个值为 20 的数字传递,并在我们自己的验证函数中验证其值是否大于 100。它也称为自定义验证函数,其名称必须与我们的propName相同(在本例中为goodsNo )。我们在函数goodsNo()中提供以下参数:

  • props:它指的是我们在组件内部传递的所有道具。
  • propName:它指的是我们正在为其创建此验证函数的道具,在本例中为goodsNo
  • component:它指的是我们传递 props 的组件,在本例中是我们的类组件ProfitComponent

我们通过在函数中写入props[propName]来访问我们的propName goodsNo ,并验证它的值是否大于 100。由于我们的 props 值为 20,我们会在浏览器的控制台中收到我们提供的错误消息。它清楚地告诉我们,我们的名为goodsNo的 prop 的值小于 100。这样,我们可以使用用户定义的验证函数来验证传入 prop 的数据。