0

0

领导级别:在 React 中管理表单

王林

王林

发布时间:2024-07-17 09:10:15

|

939人浏览过

|

来源于dev.to

转载

领导级别:在 react 中管理表单

作为首席开发人员,在 react 中管理表单不仅需要了解基础知识,还需要实现高级模式和最佳实践,以确保可扩展性、可维护性和性能。这个全面的指南涵盖了受控和非受控组件、表单验证和复杂表单管理技术,帮助您有效地领导您的团队。

受控组件

受控组件是 react 组件,其中表单数据由组件的状态处理。这种方法提供了对表单输入的完全控制,使表单行为可预测且更易于管理。

使用状态处理表单数据

要创建受控组件,请初始化表单数据的状态并根据用户输入更新状态。

示例:

import react, { usestate } from 'react';

const controlledform = () => {
  const [formdata, setformdata] = usestate({
    name: '',
    email: ''
  });

  const handlechange = (event) => {
    const { name, value } = event.target;
    setformdata((prevdata) => ({
      ...prevdata,
      [name]: value
    }));
  };

  const handlesubmit = (event) => {
    event.preventdefault();
    alert(`name: ${formdata.name}, email: ${formdata.email}`);
  };

  return (
    


); }; export default controlledform;

在此示例中,usestate 管理表单数据,而每当用户在输入字段中键入内容时,handlechange 函数就会更新状态。

不受控制的组件

不受控制的组件依赖 dom 来处理表单数据。 refs 用于直接从 dom 元素访问表单数据,这对于需要立即访问 dom 的某些用例非常有用。

使用 refs 访问表单数据

要创建不受控制的组件,请使用 useref 钩子为表单元素创建引用。

示例:

import react, { useref } from 'react';

const uncontrolledform = () => {
  const nameref = useref(null);
  const emailref = useref(null);

  const handlesubmit = (event) => {
    event.preventdefault();
    alert(`name: ${nameref.current.value}, email: ${emailref.current.value}`);
  };

  return (
    


); }; export default uncontrolledform;

在此示例中,nameref 和 emailref 引用用于在提交表单时直接从 dom 元素访问输入值。

表单验证

表单验证确保用户输入在提交之前满足所需的标准。正确的验证可以改善用户体验并防止处理错误的数据。

基本验证技术

基本验证涉及检查表单提交处理程序中的输入值并显示适当的错误消息。

示例:

import react, { usestate } from 'react';

const basicvalidationform = () => {
  const [formdata, setformdata] = usestate({
    name: '',
    email: ''
  });
  const [errors, seterrors] = usestate({});

  const handlechange = (event) => {
    const { name, value } = event.target;
    setformdata((prevdata) => ({
      ...prevdata,
      [name]: value
    }));
  };

  const validate = () => {
    const newerrors = {};
    if (!formdata.name) newerrors.name = 'name is required';
    if (!formdata.email) newerrors.email = 'email is required';
    return newerrors;
  };

  const handlesubmit = (event) => {
    event.preventdefault();
    const newerrors = validate();
    if (object.keys(newerrors).length > 0) {
      seterrors(newerrors);
    } else {
      alert(`name: ${formdata.name}, email: ${formdata.email}`);
    }
  };

  return (
    


); }; export default basicvalidationform;

在此示例中,验证函数检查名称和电子邮件字段是否为空并相应地设置错误消息。

2088shop商城购物系统
2088shop商城购物系统

2088shop商城购物系统是商城系统中功能最全的一个版本:非会员购物、商品无限级分类、不限商品数量、商品多级会员定价、上货库存、Word在线编辑器、订单详情销售报表、商品评论、留言簿、管理员多级别、VIP积分、会员注册积分奖励、智能新闻发布、滚动公告、投票调查、背景图片颜色更换、店标上传、版权联系方式修改、背景音乐(好歌不断)、广告图片支持Flash、弹出浮动广告、搜索引擎关健词优化、图文友情联

下载

用于表单验证的第三方库

使用 formik 和 yup 等第三方库可以简化表单验证并使其更易于维护。

以福米克和是的为例:

import react from 'react';
import { formik, field, form, errormessage } from 'formik';
import * as yup from 'yup';

const signupschema = yup.object().shape({
  name: yup.string().required('name is required'),
  email: yup.string().email('invalid email').required('email is required'),
});

const formikform = () => (
  

signup form

{ alert(json.stringify(values, null, 2)); }} > {() => (


)}
); export default formikform;

在此示例中,formik 和 yup 处理表单状态和验证。 formik 提供了一种灵活的方式来管理表单,而 yup 则帮助定义验证模式。

复杂表单管理

管理多步骤表单

多步骤表单涉及跨多个步骤管理状态和导航,通常使表单填写过程更容易、更用户友好。

示例:

import react, { usestate } from 'react';

const multistepform = () => {
  const [step, setstep] = usestate(1);
  const [formdata, setformdata] = usestate({
    name: '',
    email: '',
    address: '',
  });

  const nextstep = () => setstep(step + 1);
  const prevstep = () => setstep(step - 1);

  const handlechange = (e) => {
    const { name, value } = e.target;
    setformdata((prevdata) => ({
      ...prevdata,
      [name]: value
    }));
  };

  const handlesubmit = (e) => {
    e.preventdefault();
    alert(json.stringify(formdata, null, 2));
  };

  switch (step) {
    case 1:
      return (
        

step 1

); case 2: return (

step 2

); case 3: return (

step 3

); default: return null; } }; export default multistepform;

在此示例中,表单状态是跨多个步骤进行管理的。 `下一步

和 prevstep` 函数处理步骤之间的导航。

处理表单中的文件上传

处理文件上传涉及使用文件输入元素并在组件状态下管理上传的文件。

示例:

import React, { useState } from 'react';

const FileUploadForm = () => {
  const [file, setFile] = useState(null);

  const handleFileChange = (e) => {
    setFile(e.target.files[0]);
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    if (file) {
      alert(`File name: ${file.name}`);
    } else {
      alert('No file selected');
    }
  };

  return (
    

); }; export default FileUploadForm;

在此示例中,handlefilechange 函数用所选文件更新状态,handlesubmit 函数处理表单提交。

结论

在 react 中管理表单涉及理解和实现受控和非受控组件、执行表单验证以及处理复杂表单(例如多步表单和文件上传)。通过掌握这些概念,您可以在 react 应用程序中创建健壮、可维护且用户友好的表单。作为首席开发人员,您有效管理表单的能力将提高团队的生产力,并有助于提高应用程序的整体质量,确保在整个开发过程中遵循最佳实践并保持高标准。

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2924

2024.08.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号