• 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 

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

  • 相关阅读:
    【探索AI】十三 深度学习之第2周:深度神经网络(二)参数初始化策略
    量子计算:数据安全难题
    基于“小数据”的机器学习
    Android Root全教程
    算力五力模型:一种衡量算力的综合方法
    百度千帆大模型文心一言api调用
    高等数学--微分方程的求解(sympy库)
    qt的鼠标事件
    HC32L130移植Freertos
    R3LIVE代码详解(三)
  • 原文地址:https://blog.csdn.net/weixin_46600931/article/details/139349497