【react框架】结合antd做表单组件的一些心得记录

news2024/11/28 10:52:11

文章目录

  • 前言
  • 功能的实现尽量先看看antd上是否已经提供
  • 当一个页面有多个表单组件时,就要优先考虑把值存在状态管理中
  • 如果一些表单比较简单且能确保后续不会有功能上的拓展,可以使用业务组件
  • 推荐其他的表单库

前言

因为最近在学其他东西,今天文章会记录的比较水,后续有空了会不断补充内容。


功能的实现尽量先看看antd上是否已经提供

在做表单的很多时候,我都是从antd上把其中一个form组件例子复制下来,然后再看看提供了哪些api就开干了。

这样做其实会忽略很多细节方面的东西,比如我想在rules校验的时候拿到其他item的值,可能会通过form的实例调用getFieldValue,但其实在rules的使用中已经默认传入了该方法:

rules={[
  ({ getFieldValue }) => ({
    validator(_, value) {
      // 可以通过getFieldValue('password')获取对应其他item的值
    },
  }),
]}

类似的例子还有很多,所以有些需要的功能其实你细看整个form组件的页面说明后,说不定就给你找到了你想要的。

这里提供一个注册表单的例子,里面很多小细节可以注意下,没准你还有新发现:

<Form labelCol={{ span: 6 }} wrapperCol={{ span: 16 }} onFinish={onFinish}>
  <Form.Item
    label="用户名"
    name="username"
    rules={[
      { required: true, message: '请输入用户名' },
      { type: 'string', min: 5, max: 20, message: '字符长度在 5-20 之间' },
      { pattern: /^\w+$/, message: '只能是字母数字下划线' },
    ]}
  >
    <Input />
  </Form.Item>
  <Form.Item
    label="密码"
    name="password"
    rules={[{ required: true, message: '请输入密码' }]}
  >
    <Input.Password />
  </Form.Item>
  <Form.Item
    label="确认密码"
    name="confirm"
    dependencies={['password']} // 依赖于 password ,password 变化,会重新触发 validator
    rules={[
      { required: true, message: '请输入密码' },
      ({ getFieldValue }) => ({
        validator(_, value) {
          if (!value || getFieldValue('password') === value) {
            return Promise.resolve()
          } else {
            return Promise.reject(new Error('两次密码不一致'))
          }
        },
      }),
    ]}
  >
    <Input.Password />
  </Form.Item>
  <Form.Item label="昵称" name="nickname">
    <Input />
  </Form.Item>
  <Form.Item wrapperCol={{ offset: 6, span: 16 }}>
    <Space>
      <Button type="primary" htmlType="submit">
        注册
      </Button>
      <Link to={LOGIN_PATHNAME}>已有账户,登录</Link>
    </Space>
  </Form.Item>
</Form>

其实不仅仅是表单组件,其他组件也是一样的道理,所以建议没事可以多去antd上翻翻,留下些功能整体印象


当一个页面有多个表单组件时,就要优先考虑把值存在状态管理中

这种场景太常见了,一个页面有多个表单组件。我看很多时候大家都是把每个组件的数据状态维护在各自的组件中,其实不太好。

  • 指不定你下个页面还可以返回上一步的表单填写页,如果都把数据统一放在状态管理维护,回显就很容易了。
  • 各个表单组件可能是会联动的,例如a组件的某个item的值会改变b组件的一些item的显隐,有状态管理就比较容易去做。

如果一些表单比较简单且能确保后续不会有功能上的拓展,可以使用业务组件

例如后台管理的一些列表搜索页的搜索表单区域,这种一般就不会做的很复杂,很适合用业务组件。

在这里插入图片描述

但当你觉得某个表单现在看来简单,但以后被改复杂的可能性很大时,就不要考虑使用业务组件了。

代码后续补充


推荐其他的表单库

react-hook-form,formik,这俩个都很强大,但是其实antd提供的表单已经能满足大部分的需求了。


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

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

相关文章

华中科技大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 华中科技大学计算机考研招生学院是计算机科学与技术学院、软件学院和网络空间安全学院。目前均已出拟录取名单。 华中科技大学计算机科学与技术学院成立于1997年&#xff0c;其前身是原华中理工大学&#xff08;即华中…

2023智源大会议程公开丨AI开源论坛

6月9日&#xff0c;2023北京智源大会&#xff0c;将邀请这一领域的探索者、实践者、以及关心智能科学的每个人&#xff0c;共同拉开未来舞台的帷幕&#xff0c;你准备好了吗&#xff1f;与会知名嘉宾包括&#xff0c;图灵奖得主Yann LeCun、图灵奖得主Geoffrey Hinton、OpenAI创…

chatgpt赋能python:Python反转字符串——简单易学的编程技巧

Python反转字符串——简单易学的编程技巧 你是否曾经遇到过需要反转字符串的情况&#xff1f;例如&#xff0c;你想把“Hello World”转换成“dlroW olleH”&#xff1f;如果是这样&#xff0c;Python可以帮你完成这个任务。在本文中&#xff0c;我们将看到如何使用Python的简…

C++标准模板库 栈容器的使用

我们知道c标准模板库中栈和队列很重要&#xff0c;是考试的重点内容&#xff0c;今天和我一起来学习栈容器的使用吧 特点&#xff1a;先进后出&#xff0c;后进先出&#xff08;餐馆的盘子&#xff09; C中有专门的栈容器stack 常用 Push(S,x);//入栈 POp(S,x);//出栈 GetT…

判断点在多边形内算法的C++实现

本篇博客介绍了使用射线法判断点在多边形内部还是外部的算法&#xff0c;并通过C做了具体实现 1. 算法思路 判断平面内点是否在多边形内有多种算法&#xff0c;其中射线法是其中比较好理解的一种&#xff0c;而且能够支持凹多边形的情况。该算法的思路很简单&#xff0c;就是…

网络基础(二)- TCP协议

TCP协议 TCP全称为 “传输控制协议(Transmission Control Protocol”)。它最重要的是解决在传输层通信的过程中&#xff0c;解决网络通信过程中可靠性的问题。当然&#xff0c;很多人在理解TCP的时候&#xff0c;往往只知道帮我们解决可靠性&#xff0c;但是&#xff0c;同时呢…

JavaWeb三大组件之一Filter(过滤器)

定义 拦截所有访问web资源的请求或者响应(servlet、Jsp页面、HTML页面)&#xff0c;从而实现我们自己的业务逻辑&#xff0c;这些逻辑可以是实现访问权限的控制、过滤敏感词、压缩响应等功能。 原理 过滤器是"链接"在容器的处理过程中的&#xff0c;它会在servle…

2023 华为 Datacom-HCIE 真题题库 09/12--含解析

单项选择题 1.[试题编号&#xff1a;190485] &#xff08;单选题&#xff09;华为交换机MAC地址表的老化时间默认是多少秒? A、500 B、5 C、300 D、400 答案&#xff1a;C 解析&#xff1a;无 2.[试题编号&#xff1a;190484] &#xff08;单选题&#xff09;如图所示&#…

小伙以1.2万元价格拍下一颗“荔枝王”:要将这颗最好的荔枝送给女友

近日&#xff0c;一则海南海口公益拍卖的新闻引起了网友的热议。 一位小伙子以1.2万元的价格拍下了一颗被誉为“荔枝王”的稀有果实&#xff0c;并表示要将这颗最好的荔枝送给自己的女友。 这个举动引起了一些网友的质疑&#xff0c;有人称赞他的浪漫&#xff0c;也有人质疑他的…

免费分享一套 SpringBoot + Vue的排课/选课管理系统,挺漂亮的

大家好&#xff0c;我是锋哥&#xff0c;看到一个不错的SpringBoot Vue 的排课/选课管理系统&#xff0c;分享下哈。 项目介绍 近年来&#xff0c;随着网络学校规模的逐渐增大&#xff0c;人工书写数据已经不能够处理如此庞大的数据。为了更好的适应信息时代的高效性&#x…

Nginx网络服务——虚拟主机设置

Nginx网络服务——虚拟主机设置 一、基于域名的 Nginx 虚拟主机1&#xff0e;为虚拟主机提供域名解析2.为虚拟主机准备网页文档3.修改Nginx的配置文件4.重启服务&#xff0c;访问测试 二、基于IP 的 Nginx 虚拟主机1.设置虚拟主机IP2.修改主配置文件3.重启服务&#xff0c;访问…

chatgpt赋能python:Python反向传播算法——神经网络的基础

Python反向传播算法——神经网络的基础 什么是反向传播算法&#xff1f; 反向传播算法是神经网络中最常用的学习算法之一。它的作用是根据输入数据和输出数据来调整神经网络中的权重&#xff0c;从而让神经网络模型更好地适应特定的问题。 简单来说&#xff0c;反向传播算法…

强化学习Q-learning入门

1. 引言 本文为最近学习的强化学习Q-learning的学习笔记&#xff0c;主要用于总结和日常记录&#xff0c;本文主要讲解相应的必备入门知识。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 概念 我们小时候都经历过以下情形&#xff1a;我们做错了某年事&#xff0c;…

string

1.标准库的string类 构造函数&#xff1a; 构造函数的使用&#xff1a; 析构函数&#xff1a; 编译器会自己进行调用&#xff0c;不用管 拷贝构造函数&#xff1a; 追加字符函数&#xff1a; 追加字符串函数&#xff1a; 运算符重载函数&#xff1a; &#xff1a; 会用之后…

Python之socket编程(53)

​小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 今天的内容比较多哦&#xff0c;主要是网络编程的一些入门知识。 这些知识在互联网发展过程中很重要&#xff0…

Java中final关键字的理解(多线程中的final)

一、final关键字 Java中的final关键字具有不可变性的特性&#xff0c;其可以修饰类、方法和变量。 1. final修饰类&#xff1a;final关键字可以用来修饰类&#xff0c;表示该类是不可继承的。final类中的所有方法都是隐式final的&#xff08;不能被override或shadow&#xff0…

【深度学习-第1篇】深度学习是什么、能干什么、要怎样学?

大概4年前本专栏发布了一篇关于神经网络的入门科普文章&#xff0c;到现在大概有小5k赞了&#xff08;Mr.看海&#xff1a;神经网络15分钟入门&#xff01;足够通俗易懂了吧&#xff09;。 这几年人工智能发生了突飞猛进的发展&#xff0c;时至今日甚至发展出了GPT-4、Midjourn…

经典高并发服务器设计逻辑

都是面试必问的八股&#xff0c;不管理不理解用不用得上&#xff0c;背就完事了。 服务器模型 对于并发量比较大的服务器&#xff0c;即listen监听端口一直忙碌于处理新建连接的场景&#xff0c;一般在主线程里面accept新的客户端连接并生成新连接的socket&#xff0c;然后将这…

Unity制作二次元卡通渲染角色材质——2、色阶化光影的多种做法对比

Unity制作二次元材质角色 回到目录 大家好&#xff0c;我是阿赵。 这里继续讲二次元角色渲染。之前说过&#xff0c;最基本的卡通渲染&#xff0c;包含了色阶化光影和描边二个元素。所以这里先来说一下色阶化光影的多种做法对比。 一、光照模型和色阶化的说明 从上一篇文章里…

拿捏-哈夫曼树构建及编码生成(建议收藏)

文章目录 哈夫曼树的基本概念哈夫曼树的构建构建思路代码实现 哈夫曼编码的生成编码生成思路代码实现 完整代码展示及代码测试 哈夫曼树的基本概念 在认识哈夫曼树之前&#xff0c;你必须知道以下几个基本术语&#xff1a; 1、什么是路径&#xff1f; 在一棵树中&#xff0c;从…