码农知识堂 - 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 

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

  • 相关阅读:
    驱动开发练习,platform驱动模型的使用
    Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?-3
    【动手学深度学习】多层感知机模型选择、欠拟合和过拟合研究详情
    Android Target 从 30 升到 31
    疫苗预约系统,疫苗接种管理系统,疫苗预约管理系统毕设作品
    如何在 Ubuntu 上安装和使用 Nginx?
    mysql 5.7版本的 安装流程 和 官方文档说明
    大数据_面试题_Java篇集锦
    vue中minxin和hooks区别
    Android设计模式--观察者模式
  • 原文地址: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号