当前位置: 首页 > news >正文

react、vue动态form表单

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

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

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

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

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

import {Button, Cascader, Col, DatePicker, Form, Input, InputNumber, Mentions, Row, Select, TreeSelect} from "antd";
import React from "react";
import style from "./style.less";const {RangePicker} = DatePicker;const formItemLayout = {labelCol: {xs: {span: 24},sm: {span: 6},},wrapperCol: {xs: {span: 24},sm: {span: 18},},
};type ColSpanType = {offset?: number;xs?: number;sm?: number;md?: number;lg?: number;xl?: number;
};const FormApp: React.FC = () => {
//根据ui 设置布局const responsiveLayout: ColSpanType = {xs: 24,sm: 24,md: 8,lg: 8,xl: 8,};const formItems = [{label: 'Input', name: 'Input', rules: [{required: true, message: "Please input!"}], component: Input, placeholder: '请输入',events: {onChange: (e) => console.log(e.target.value),onFocus: () => console.log('Input focused'),// Add other events here},},// ... other form items ...];return (<Form {...formItemLayout} className={style.formContainer}>{formItems.map((item, index) => (<Col {...responsiveLayout} key={index}><Form.Item label={item.label} name={item.name} rules={item.rules}><item.component placeholder={item.placeholder} style={{width: "100%"}} {...item.events} /></Form.Item></Col>))}<Col span={24}><Row justify='end'><Form.Item><Button type='primary' htmlType='submit'>Submit</Button></Form.Item></Row></Col></Form>);
};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 

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

http://www.lryc.cn/news/359544.html

相关文章:

  • halcon程序如何导出C#文件
  • RabbitMQ三、springboot整合rabbitmq(消息可靠性、高级特性)
  • 第八十九周周报
  • Centos升级Openssh版本至openssh-9.3p2
  • 茉莉香飘,奶茶丝滑——周末悠闲时光的绝佳伴侣
  • 揭秘:Java字符串对象的内存分布原理
  • Vue.js - 生命周期与工程化开发【0基础向 Vue 基础学习】
  • Element-UI 快速入门指南
  • 2024华为OD机试真题-整型数组按个位值排序-C++(C卷D卷)
  • 善听提醒遵循易经原则。世界大同只此一路。
  • CrossOver有些软件安装不了 用CrossOver安装软件后如何运行
  • 在vue中如何使用leaflet图层展示地图
  • mybatisplus 字段存的是json 在查询的时候怎么映射成对象
  • Python 学习笔记【1】
  • Git系列:rev-parse 使用技巧
  • 【Java数据结构】详解LinkedList与链表(一)
  • PDF高效编辑器革新:一键智能转换PDF至HTML,轻松开启文件处理全新时代!
  • JDBC知识
  • C++操纵符用法
  • 【一步一步了解Java系列】:子类继承以及代码块的初始化
  • 探索Expect Python用法:深入解析与实战挑战
  • 【PostgreSQL17新特性之-explain命令新增选项】
  • JAVA实现人工智能,采用框架SpringAI
  • 基础—SQL—DQL(数据查询语言)分组查询
  • 从CSV到数据库(简易)
  • K210视觉识别模块学习笔记3:内存卡写入拍摄图片_LED三色灯的操作_按键操作_定时器的配置使用
  • 如何定义“智慧校园”这个概念
  • OpenSSL自签名证书
  • QtCreator调试运行工程报错,无法找到相关库的的解决方案
  • 【Python系列】Python 元组(Tuple)详解