基于antd@5.x封装Form.List组件

这篇具有很好参考价值的文章主要介绍了基于antd@5.x封装Form.List组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于antd@5.x封装Form.List组件

基于antd@5.x封装Form.List组件,list,react.js,javascript
使用案例文章来源地址https://www.toymoban.com/news/detail-601195.html

const initFormState = {
	formList1: [
		{
			start: '测试',
			end: '100',
		},
		{
			start: 'abc',
			end: 'value',
		},
	],
	formList2: [
		{
			start: '测试2',
			end: '6',
		},
		{
			start: 'vxcv',
			end: 'jksdhfjk',
		},
	],
};


<Form
	form={form}
	onFinish={onFinish}
	autoComplete='off'
	initialValues={initFormState}
>
	<FormList
		name='formList1'
		rules={[
			{
				validator(_, names) {
					if (!names || !names.length) {
						return Promise.reject(new Error('至少填写一组数据!'));
					}

					return Promise.resolve();
				},
			},
		]}
		dataSource={[
			{ 
			    label: 'start', name: 'label',
			    component: <Input />,
			    rules: [{ required: true, message: '请输入' }],
			},
			{ label: 'end', name: 'value', component: <Input /> },
		]}
	/>
	<FormList
		name='formList2'
		dataSource={[
			{ label: 'start', name: 'label', component: <Input /> },
			{ label: 'end', name: 'value', component: <Input /> },
		]}
	/>
	<Form.Item>
		<Button type='primary' htmlType='submit'>
			Submit
		</Button>
	</Form.Item>
</Form>
import React from 'react';
import { Form, Button, Space } from 'antd';
import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
import { IPropsType } from './interface';

function FormList(props: IPropsType & typeof Form.List) {
	const { addText, addHidden, addDisabled, dataSource, name, ...otherFormListProps } = props;
	
	return (
		<Form.List name={name} {...otherFormListProps}>
			{(fields, { add, remove }) => {
				return (
					<>
						{fields.map(({ key, name: fieldName, ...restField }) => (
							<div key={key}>
								<Space align='baseline'>
									{dataSource.map(
										({ label, name: itemName, component, ...formItem }, idx) => {
											return (
												<Form.Item
													key={idx}
													{...restField}
													label={label}
													name={[fieldName, itemName]}
													{...formItem}
												>
													{component}
												</Form.Item>
											);
										},
									)}
	
									<MinusCircleOutlined onClick={() => remove(fieldName)} />
								</Space>
							</div>
						))}
						{!addHidden && (
							<Form.Item>
								<Button
									type='dashed'
									disabled={addDisabled}
									onClick={() => add()}
									block
									icon={<PlusOutlined />}
								>
									{addText}
								</Button>
							</Form.Item>
						)}
					</>
				);
			}}
		</Form.List>
	);
}

FormList.defaultProps = {
	addText: '新增',
	addHidden: false,
	addDisabled: false,
	dataSource: [],
	name: '',
};

export default FormList;

import React from 'react';

interface IDataSourceType {
	name: string;
	label?: string | React.ReactNode | undefined;
	component: React.ReactNode;
}

export interface IPropsType {
	/**
	 * 新增按钮文案 String | ReactNode
	 */
	addText: string | React.ReactNode;

	/**
	 * 新增按钮是否隐藏 Boolean
	 */
	addHidden: boolean;
	addDisabled: boolean;

	/**
	 * 循环重复表单项
	 */
	dataSource: IDataSourceType[];

	/**
	 * Form.List 绑定字段
	 */
	name: string;
}

到了这里,关于基于antd@5.x封装Form.List组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • antd List 滚动加载(InfiniteScroll ) react-infinite-scroll-component 重置滚动条

    问题 :在页面滚动的时候,infiniteScroll 页面数是自动+1。举个例子,页面加载到第三页,infiniteScroll 无法在重新开始计数,而在某些场景中需要重新开始计数,比如切换月份等(按照需求),page number 需要重新计数。(切换后会自动滚动到上一次滚动位置,自动调用接口)

    2024年02月22日
    浏览(27)
  • react Hook+antd封装一个优雅的弹窗组件

    前言 在之前学vue2的时候封装过一个全局的弹窗组件,可以全局任意地方通过this调用,这次大创项目是用react技术栈,看了一下项目需求,突然发现弹窗还是比较多的,主要分为基础的弹窗以及form表单式的弹窗,如果只是无脑的去写代码,那些项目也没啥必要了。正好react和

    2024年02月13日
    浏览(31)
  • react18+antd5.x(1):Notification组件的二次封装

    antdesign已经给我们提供了很好的组件使用体验,但是我们还需要根据自己的项目业务进行更好的封装,减少我们的代码量,提升开发体验 开起来和官网的使用没什么区别,但是我们在使用的时候,进行了二次封装,更利于我们进行开发 MyNotification.jsx,是我们的业务页面 Notif

    2024年02月11日
    浏览(36)
  • React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗?

    突然发现 antd 的 getFieldsValue()是可以传一个 true 参数的,如题,React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗? 确实不一样 getFieldsValue 提供了多种重载方法: getFieldsValue(nameList?: true | NamePath[], filterFunc?: FilterFunc) 当不提供 nameList 时,返回所有注册字段,这也包含

    2024年02月11日
    浏览(28)
  • 基于List封装递归树及查找当前节点下所有子节点

    在Java日常开发中,经常遇到需要组装数据格式为多层级递归树的形式给前端使用,根据具体的业务场景和数据结构封装树的工具类也是各种各样,那么有没有一种通用、简洁、容易理解且高效的方式实现这样的业务场景呢? 一般根据业务场景常用的数据结构类型有ListEntity和

    2024年02月13日
    浏览(18)
  • React Antd可编辑单元格,非官网写法,不使用可编辑行和form验证

    antd3以上的写法乍一看还挺复杂,自己写了个精简版 没用EditableRow+Cell的结构,也不使用Context、高阶组件等,不使用form验证 最终效果: 最后使用的时候直接在column元素的render里面EditableCell /EditableCell就好啦, props一定要传处理保存修改的方法 现在这个可编辑单元格组件在鼠

    2024年02月09日
    浏览(26)
  • Ant Design Form.List基础用法

    项目中需要在新增可以多个如图 代码如下 其中add 方法可以添加参数,为添加的默认参数 注意: {…field} 一定要放在 name={[field.name,‘XXX’]} 的前面,否则就会出错 以上共勉

    2024年02月07日
    浏览(33)
  • 在react antd中动态生成多个 form表单组,包括一个动态添加/删除表单项的功能和一个提交表单的功能

    在这个示例中,我们首先使用 Form.useForm() 创建一个表单实例。接着,我们使用 Form.List 组件来动态生成多个表单项。在 Form.List 组件中,我们使用 fields.map 方法循环渲染每个表单项,并使用 Form.Item 组件包裹每个表单项。在 Form.Item 组件中,我们使用 label 属性指定标签,使用

    2024年02月15日
    浏览(46)
  • React修改Antd组件的样式

    修改默认的antd组件,需要使用 global 修改后Steps样式 为什么需要这样写呢? 因为我们启动了 CSS Modules ,它是一种技术流的组织css代码的策略,它将为css提供默认的局部作用域。因为构建工具会在编译的时候自动把我们的类名加上一个哈希字符串,例如上面我们写的类名为t

    2024年02月11日
    浏览(39)
  • react 基于 dnd-kit 封装的拖拽排序组件

    官网地址 https://docs.dndkit.com/introduction/installation 安装依赖 简单使用 建议直接看官网,已经描述得很详细了:https://docs.dndkit.com/presets/sortable 效果展示 注意事项 如果传入的是一个函数式组件,需要用一个html元素包裹住 这里的排序默认是读取 list 中的 id 作为 key 值的,如果

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包