如何在React表单提交处理程序中正确地捕获和解析错误

如何在React表单提交处理程序中正确地捕获和解析错误

我们广泛使用表单从用户那里获取输入,以便用户能够与Web服务器进行交互。表单包含各种信息,如电子邮件地址、用户名和密码,用户将其发送给我们,我们可以将其存储在Web服务器上。

表单是许多网站中广泛使用的元素,使其成为一个重要的组件。在ReactJS中创建表单类似于在HTML中创建表单,但在HTML中创建的表单是静态的,而在React中,我们可以添加许多独特的功能,如验证等。在构建表单验证时,处理错误变得困难,关键是我们如何给用户一个适当的响应并正确处理错误。

有很多方法可以做到这一点。在这里,我们将使用 Formsy库 来处理表单错误和验证。

什么是Formsy?

Formsy是一个用于React的开源库,用于构建和验证表单输入。我们可以使用该库来捕获和解析错误。它帮助我们处理这两个关键问题:

  1. 验证和错误消息
  2. 处理表单提交

以下是在项目中使用Formsy的逐步指南:

步骤1: 创建React应用程序

npx create-react-app appname

步骤2: 创建项目文件夹后,进入您的项目文件夹。

cd appname

步骤3: 现在我们可以添加Formsy来构建表单和处理错误。

npm i formsy-react

项目结构: 它将如下所示。

如何在React表单提交处理程序中正确地捕获和解析错误

步骤4: 创建一个名为InputField.js的文件,其中包含一个HTML输入标签。这样我们就可以导入它并在我们的表单中使用它(在App.js中)。

InputField.js: 通过在InputField.js中编写以下代码,先导入formsy-react中的withFormsy。

import { withFormsy } from 'formsy-react'
import { withFormsy } from 'formsy-react'
import React from 'react'
  
class MyInput extends React.Component { 
    constructor(props) { 
        super(props) 
        this.changeValue = this.changeValue.bind(this) 
    } 
  
    changeValue(event) { 
        this.props.setValue(event.currentTarget.value); 
    } 
  
    render() { 
        const errorMessage = this.props.errorMessage;//Line 15 
  
        return ( 
            <div className='input-row'> 
                <label> 
                    {this.props.label}  
                    {this.props.isRequired ? '*' : null} 
                </label> 
                <input onChange={this.changeValue}  
                    type={this.props.type} 
                    placeholder={this.props.placeholder}  
                    value={this.props.value || ''} /> 
                <span>{errorMessage}</span>//Line 21 
            </div> 
        ) 
    } 
} 
  
export default withFormsy(MyInput) //Line 27

在引入 withFormsy 自formsy-react之后,我们创建了一个输入字段并添加了一些常见的HTML属性。第15行指示只有在组件无效时,才会传递错误消息。如果其中一个组件(即输入字段)无效,则在第21行向用户显示错误消息。如果组件(即输入字段)有效,即满足我们的要求,则不会向用户显示错误消息。

注意: 所有Formsy输入组件必须包装在withFormsy高阶组件中,该组件通过props提供属性和方法。第27行指示将一个组件(MyInput)包装在另一个组件(withFormsy)中,包装组件接收容器的所有props,以及一个新的prop(data),它用于渲染其输出。

步骤5: 首先,我们需要从formsy-react中导入Formsy。将以下代码写入您的App.js文件中进行导入。

import Formsy from 'formsy-react'

App.js

import React, { useState } from 'react'
import './App.css'
import Formsy from 'formsy-react'
import InputField from './InputField'//Line 4 
  
// Line 6 
const errors = { 
    isEmail: 'You have to type a valid email', 
    maxLength: 'You cannot type more than 25 characters', 
    minLength: 'You must type more than 6 characters', 
} 
  
function App() { 
    const [canSubmit, setCanSubmit] = useState(false); //Line 14 
  
    const disableButton = () => { 
        setCanSubmit(false); 
    } 
  
    const enableButton = () => { 
        setCanSubmit(true); 
    } 
  
    const submit = () => { 
        console.log('Form is Submitted'); 
    } 
  
    return ( 
        <div className='app'> 
            <h1>Form in React Js</h1> 
  
            <Formsy className='form' 
                onValidSubmit={submit}  
                onValid={enableButton} 
                onInvalid={disableButton}> 
                <InputField label="First Name" 
                    type="text" name="email"
                    validations="maxLength:25" 
                    validationErrors={errors} 
                    placeholder="Type your First Name" 
                    required /> 
  
                <InputField label="Last Name" 
                    type="text" name="lastname"
                    validations="maxLength:25" 
                    validationErrors={errors} 
                    placeholder="Type your last Name" 
                    required /> 
  
                <InputField label="Email address" 
                    type="text" name="email"
                    validations="maxLength:30,isEmail" 
                    validationErrors={errors} 
                    placeholder="Type your email address..." 
                    required /> 
  
                <InputField label="Password" 
                    type="password" name="password"
                    validations="minLength:6" 
                    validationErrors={errors} 
                    placeholder="Type your password..." 
                    required /> 
  
  
                <button type="submit" 
                    disabled={!canSubmit}> 
                    Submit 
                </button> 
            </Formsy> 
        </div> 
    ) 
} 
  
export default App

在App.js中,我们将构建我们的表单逻辑。从第6行开始,我们写了一些错误消息,以便当输入字段的值不符合我们的要求时向用户显示错误。您可以根据您的要求进行更改。然后,我们需要通过导入将inputField组件添加到Line 4中。我们将使用Formsy组件包装所有输入字段,该组件提供了一些有助于表单验证的属性。对我们有帮助的属性,即validations和validationError。

  1. validations: 在这里,我们可以通过逗号分隔传递一些验证器(如maxLength,minLength,isNumeric,isEmail)。并且通过使用“:”可以传递一些参数(例如maxLength:25,因此如果输入字段的值的长度超过25,它将向用户抛出一个错误)。

  2. validationerrors: 您可以手动传递错误给您的表单。当未满足要求时(例如,当输入字段的值的长度超过25个字符时),它会显示出来。

其他属性,如placeholder,type,label等都是常见的HTML属性。

通过这种方式,您可以根据您的要求添加自己的条件和错误消息。

使用Formsy标签包装还为我们提供了OnValidSubmit,OnValid和OnInvalid等功能,这些功能可以帮助我们进行表单提交。

  • onValidSubmit: 它确保在没有错误的情况下提交表单后要执行的操作。在这种情况下,submit方法将运行并提交我们的表单。
  • onValid: 它确保仅当所有输入字段都有效时才能提交表单。因此,在这种情况下,如果所有输入字段都有效,则调用enableButton方法,在Line 14中定义的状态变量canSubmit的帮助下启用提交按钮。
  • onInvalid: 它确保在一个输入字段无效时不能提交表单。因此,在这种情况下,如果一个输入字段无效,则调用disableButton方法,在Line 14中定义的状态变量canSubmit的帮助下禁用提交按钮。

Formsy给我们提供了许多功能,您可以自己探索。

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

npm start

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

在下面的输出中,我们无法注册,因为密码长度不符合要求。

如何在React表单提交处理程序中正确地捕获和解析错误

当所有输入框的条件都有效时,注册按钮才能正常工作。

如何在React表单提交处理程序中正确地捕获和解析错误

通过这种方式,您可以处理表单错误并解析它们。最重要的是,它能够帮助您轻松构建复杂的表单,为项目处理过多的事情。这是非常方便的,可以使您的项目更高效,节省时间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程