React 表单处理与网络请求封装详解[特殊字符][特殊字符]

在 React 开发中,表单处理和网络请求是非常常见的需求。本文将围绕以下几个方面展开讲解:

  1. FormItem 绑定 name 属性
  2. 表单校验与失焦校验
  3. 获取表单数据
  4. 封装请求模块 request

1. FormItem 绑定 name 属性

在 React 中,使用 Ant Design 的 Form 组件时,Form.Itemname 属性用于标识表单字段。这个 name 属性通常需要与后端接口的字段名保持一致,以便在提交表单时能够正确映射数据。

import { Form, Input } from 'antd';const MyForm = () => {return (<Form><Form.Item name="phone" label="手机号"><Input /></Form.Item></Form>);
};

注意:

  • name 属性是表单字段的唯一标识,必须与后端接口的字段名一致。
  • 如果后端字段名是 phoneNumber,那么 name 也应该设置为 phoneNumber

2. 表单校验与失焦校验

表单校验是确保用户输入数据符合要求的重要步骤。Ant Design 的 Form 组件提供了强大的校验功能,支持多种校验规则。

失焦校验

通过设置 validateTrigger="onBlur",可以在用户离开输入框时触发校验。

<Form.Itemname="phone"label="手机号"validateTrigger="onBlur"rules={[{required: true,message: '请输入手机号',},{pattern: /^1[3-9]\d{9}$/,message: '请输入正确的手机号',},]}
><Input />
</Form.Item>

校验规则说明:

  • required: true:表示该字段为必填项。
  • pattern:使用正则表达式校验手机号格式。
  • message:校验失败时的提示信息。
多条校验

校验规则可以按顺序执行,只有前一条规则通过后才会执行下一条规则。

rules={[{ required: true, message: '请输入手机号' },{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号' },
]}

3. 获取表单数据

在表单提交时,可以通过 onFinish 回调函数获取表单数据。onFinish 会在所有校验规则通过后触发。

const handleFinish = (values) => {console.log('表单数据:', values);// 在这里可以将数据提交到后端
};<Form onFinish={handleFinish}><Form.Item name="phone" label="手机号"><Input /></Form.Item><button type="submit">提交</button>
</Form>

说明:

  • values 是一个对象,包含了所有表单字段的值。
  • 如果校验失败,onFinish 不会触发。

4. 封装请求模块 request

在一个项目中,通常会有很多网络请求。为了统一管理和复用,可以使用 axios 封装一个通用的请求模块。

封装 request 模块
import axios from 'axios';// 创建 axios 实例
const request = axios.create({baseURL: 'https://api.example.com', // 根域名timeout: 5000, // 请求超时时间
});// 请求拦截器
request.interceptors.request.use((config) => {// 在发送请求之前做一些处理,例如添加 tokenconst token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;},(error) => {return Promise.reject(error);}
);// 响应拦截器
request.interceptors.response.use((response) => {// 对响应数据做一些处理return response.data;},(error) => {// 对响应错误做一些处理return Promise.reject(error);}
);export { request };
使用 request 模块

在项目中,可以通过 request 模块发送请求:

import { request } from './utils/request';const fetchData = async () => {try {const response = await request.get('/user');console.log('用户数据:', response);} catch (error) {console.error('请求失败:', error);}
};
统一配置

可以将 request 模块的配置放在 index.js 中,方便统一管理:

// utils/request/index.js
import axios from 'axios';const request = axios.create({baseURL: 'https://api.example.com',timeout: 5000,
});request.interceptors.request.use((config) => {const token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;
});request.interceptors.response.use((response) => response.data,(error) => Promise.reject(error)
);export { request };

总结

  1. FormItem 绑定 name 属性:确保与后端字段名一致,方便数据映射。
  2. 表单校验与失焦校验:通过 rulesvalidateTrigger 实现灵活的校验逻辑。
  3. 获取表单数据:使用 onFinish 回调函数获取校验通过的表单数据。
  4. 封装请求模块:通过 axios 封装通用的 request 模块,统一管理网络请求,提升代码复用性和可维护性。

通过以上方法,可以高效地处理 React 中的表单和网络请求,提升开发效率和代码质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过idea创建的springmvc工程需要的配置

在创建的spring mvc工程中&#xff0c;使用idea开发之前需要配置文件包括porm.xml、web.xml、springmvc.xml 1、porm.xml 工程以来的spring库&#xff0c;主要包括spring-aop、spring-web、spring-webmvc&#xff0c;示例配置如下&#xff1a; <project xmlns"http:/…

Mybatis plus中的BaseMapper与ServiceImpl

BaseMapper接口方法与ServiceImpl类方法的区别与联系 什么是BaseMapper&#xff1f;什么是ServiceImpl&#xff1f; BaseMapper 是 MyBatis-Plus 提供的一个基础 Mapper 接口&#xff0c;封装了常用的 CRUD 操作方法&#xff0c;如 selectById、insert、updateById、deleteBy…

Ansible实战:如何正确选择 command 和shell模块?

在使用Ansible进行自动化运维时&#xff0c;command 和 shell 模块是我们执行命令的好帮手。虽然它们看起来很相似&#xff0c;但在功能特性和适用场景上其实有着明显的不同。正确选择合适的模块不仅能够提高任务的效率&#xff0c;还能帮助我们规避一些潜在的风险。在这篇文章…

【认识油管头部频道】ep5 “5-Minute Crafts”——DIY 和生活技巧

5-Minute Crafts 是一个非常受欢迎的 DIY 和生活技巧频道&#xff0c;它的火爆有多方面的原因&#xff1a; 1. 简单实用的内容 视频主要以解决日常生活中遇到的小问题为主&#xff0c;提供简单易学的技巧&#xff0c;吸引了想快速获取实用知识的观众。 2. 短视频形式 每个视…

【STM32-学习笔记-4-】PWM、输入捕获(PWMI)

文章目录 1、PWMPWM配置 2、输入捕获配置3、编码器 1、PWM PWM配置 配置时基单元配置输出比较单元配置输出PWM波的端口 #include "stm32f10x.h" // Device headervoid PWM_Init(void) { //**配置输出PWM波的端口**********************************…

MongoDB 学习指南:深入探索非关系型数据库

MongoDB学习资料 MongoDB学习资料 MongoDB学习资料 在当今数字化时代&#xff0c;数据量呈爆炸式增长&#xff0c;数据结构也变得愈发复杂多样。传统的关系型数据库在处理一些大规模、高并发以及非结构化数据时&#xff0c;逐渐显露出局限性。而 MongoDB 作为一款领先的非关系…

学习微信小程序的下拉列表控件-picker

1、创建一个空白工程 2、index.wxml中写上picker布局&#xff1a; <!--index.wxml--> <view class"container"><picker mode"selector" range"{{array}}" bindchange"bindPickerChange"><view class"pick…

【神经网络基础】

目录 一、神经网络的构成 1.1什么是神经网络&#xff1f; 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类&#xff08;多分类交叉…

Mac 使用 GVM 管理多版本 Go 环境

使用 GVM 管理多版本 Go 环境 在本文中&#xff0c;我们将使用 gvm&#xff08;Go Version Manager&#xff09;工具管理本地多个 Go 语言版本。gvm 功能类似于 Python 的 Anaconda&#xff0c;可以方便地切换不同版本的 Go 环境&#xff0c;非常适合需要多版本开发与测试的场…

STM32 学习笔记【补充】(十)硬件I2C读写MPU6050

该系列为笔者在学习STM32过程&#xff08;主线是江科大的视频&#xff09;中的记录与发散思考。 初学难免有所纰漏、错误&#xff0c;还望大家不吝指正&#xff0c;感谢~ 一、I2C 外设简介 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种多主多从的串行通信协议…

.Net Core webapi 实现JWT认证

文章目录 需求准备创建JWT配置创建JWTService注册JWT创建中间件读取jwt的token在需要的接口上添加属性启动认证启动swagger的授权认证使用 需求 实现一个记录某个用户所有操作的功能 准备 创建你的webapi项目从nuget下载安装JWT资源包根据你的项目使用.net版本下载对应的jwt…

leetcode203-移除链表元素

leetcode203 什么是链表 之前不懂链表的数据结构&#xff0c;一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的&#xff0c;题目中给的链表是单向链表&#xff0c;有两个值&#xff0c;一个val表示值&#xff0c;一个next&#xff1a;表示连接的下一个…

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerror和pe…

ebno_db_vec 和 num_block_err参数

ebno_db_vec 和 num_block_err 都是与无线通信系统中误码率 (BER) 测试和性能评估相关的变量。 1. ebno_db_vec (0:0.5:5) 7; ebno_db_vec 是一个表示 信噪比 (SNR) 的向量&#xff0c;通常用于测试系统在不同信噪比条件下的性能。具体来说&#xff0c;ebno_db_vec 是通过将…

stack_queue的底层,模拟实现,deque和priority_queue详解

文章目录 适配器Stack的模拟实现Queue的模拟实现vector和list的对比dequedeque的框架deque的底层 priority_queuepriority_queue的使用priority_queue的底层仿函数的使用仿函数的作用priority_queue模拟实现 适配器 适配器是一种模式&#xff0c;这种模式将类的接口转化为用户希…

DNS介绍与部署-Day 01

1. 什么是DNS DNS&#xff08;Domain Name System&#xff09;域名系统&#xff0c;是一种采用客户端/服务器机制&#xff0c;负责实现计算机名称与IP地址转换的系统。DNS作为一种重要的网络服务&#xff0c;既是Internet工作的基础&#xff0c;同时在企业内部网络中也得到了广…

LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145188660 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Scalin…

杰盛微 IRS2336STRPBF 700V带使能和故障报告的三相反逻辑驱动芯片 SOP28封装

IRS2336STRPBF 700V带使能和故障报告的三相反逻辑驱动芯片 IRS2336是 N型高压、高速功率 MOSFET/IGBT高低侧三相栅极驱动芯片&#xff0c;包含三路独立的半桥驱动电路。内部集成了欠压保护和过流保护功能&#xff0c;出现异常时立即关断六通道输出。提供外部使能控制可同时关断…

深入理解第三范式(3NF):数据库设计中的重要性与实践

title: 深入理解第三范式(3NF):数据库设计中的重要性与实践 date: 2025/1/17 updated: 2025/1/17 author: cmdragon excerpt: 在数据库设计中,规范化是确保数据完整性、减少冗余和提高查询效率的关键过程。第三范式(3NF)作为关系数据库设计的高级规范,建立在前两范式…

mongoose 支持https踩坑纪实

简述 mongoose是C编写的嵌入式web服务&#xff0c;它能够支持https协议&#xff0c;可以简单的部署&#xff0c;但要做到完美部署&#xff0c;不是那么容易。 部署方法 本人使用的是最新的7.16版&#xff0c;以前版本似乎是要通过修改 头文件中的 MG_ENABLE_SSL 宏定义&…