码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • react、vue动态form表单


    需求在日常开发中反复写form 是一种低效的开发效率,布局而且还不同这就需要我们对其封装

    为了简单明了看懂代码,我这里没有组件,都放在一起,简单抽离相信作为大佬的你,可以自己完成,

    一、首先我们做动态form 要明白几点:

    1、类型,2、检验,3、不同组件又不同的方法事件(重点)4、布局(更加通用型)

    UI库是antd(element同理替换组件即可主要是父组件formItems标签替换)

    1. import {Button, Cascader, Col, DatePicker, Form, Input, InputNumber, Mentions, Row, Select, TreeSelect} from "antd";
    2. import React from "react";
    3. import style from "./style.less";
    4. const {RangePicker} = DatePicker;
    5. const formItemLayout = {
    6. labelCol: {
    7. xs: {span: 24},
    8. sm: {span: 6},
    9. },
    10. wrapperCol: {
    11. xs: {span: 24},
    12. sm: {span: 18},
    13. },
    14. };
    15. type ColSpanType = {
    16. offset?: number;
    17. xs?: number;
    18. sm?: number;
    19. md?: number;
    20. lg?: number;
    21. xl?: number;
    22. };
    23. const FormApp: React.FC = () => {
    24. //根据ui 设置布局
    25. const responsiveLayout: ColSpanType = {
    26. xs: 24,
    27. sm: 24,
    28. md: 8,
    29. lg: 8,
    30. xl: 8,
    31. };
    32. const formItems = [
    33. {
    34. label: 'Input',
    35. name: 'Input',
    36. rules: [{required: true, message: "Please input!"}],
    37. component: Input,
    38. placeholder: '请输入',
    39. events: {
    40. onChange: (e) => console.log(e.target.value),
    41. onFocus: () => console.log('Input focused'),
    42. // Add other events here
    43. },
    44. },
    45. // ... other form items ...
    46. ];
    47. return (
    48. <Form {...formItemLayout} className={style.formContainer}>
    49. {formItems.map((item, index) => (
    50. <Col {...responsiveLayout} key={index}>
    51. <Form.Item label={item.label} name={item.name} rules={item.rules}>
    52. <item.component placeholder={item.placeholder} style={{width: "100%"}} {...item.events} />
    53. Form.Item>
    54. Col>
    55. ))}
    56. <Col span={24}>
    57. <Row justify='end'>
    58. <Form.Item>
    59. <Button type='primary' htmlType='submit'>
    60. Submit
    61. Button>
    62. Form.Item>
    63. Row>
    64. Col>
    65. Form>
    66. );
    67. };
    68. export default FormApp;

     二、完整组件分离代码

    由于代码太多见gitee

    父组件 src/pages/form/index.tsx · Jim/react-new-umi-antd-2024 - Gitee.com

    表单组件 DynamicForms src/components/DynamicForms/index.tsx · Jim/react-new-umi-antd-2024 - Gitee.com

    如果是vue 同学 DynamicForms直接拷贝使用(组件还是tsx/jsx 不要放在.vue 文档中组件还是不要用.vue 局限性太大),只需要把父组件的Dom 结构改的。推荐vu3 setup 

    原创不易,请关注谢谢支持

  • 相关阅读:
    第十章 单调栈
    《白皮书》:保障人脸安全,需要在三方面入手
    【word技巧】word页眉,如何禁止他人修改?
    【0230】PG内核底层事务(transaction)实现原理之基础篇
    5.nodejs--跨域、CORS、JSONP 、Proxy
    汽车电子专业知识篇(六十四)-车载毫米波雷达基本概念
    vscode-server
    java计算机毕业设计商院足球赛事管理源程序+mysql+系统+lw文档+远程调试
    spark sql createOrReplaceTempView
    概率论和数理统计(三)数理统计基本概念
  • 原文地址:https://blog.csdn.net/weixin_46600931/article/details/139349497
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号