React+AntDesign实现Form表单的动态增加删除操作

效果示例

1. 原来效果

在这里插入图片描述

2. 点击+之后

在这里插入图片描述

实现说明

  1. 此次开发需要用到动态生成多行表单,因为新老数据要兼顾,老数据是对象存储走的一个接口,新数据走的多行配置,对象数组存储,走的另一个接口,所以在展示上就需要区分下。
  2. 注意这里默认了第一行不能删除,当然你也可以在变成多行的时候,给每一行都加上删除,但是为了避免数据被删成一行都不剩了,你需要处理下,要么在删成一行的时候禁止删除或者隐掉删除按钮,要么就在删除后要调接口的时候判断处理下,具体的得看需求来开发。
  3. 因为这块的按钮有设置,如果配置的参数含有password字段(不区分大小写),这块也是不能做多行的。

代码附上

  1. 表格渲染数据部分代码
//这块是将拿到的数据遍历后,拿到最底层的展示表单数据,进行判断,如果获取到对应的value是字符串,那就是单行数据,走老接口,如果是是对象数组,就那么就走新接口
if (typeof data[keyName][keyName2] === 'string') {
   
  <FormItem
    {
   ...formItemLayout}
    label={
   <React.Fragment>
      {
   /* 这里是你渲染在表单上的标签名 ,根据实际情况处理*/}
      {
   key}
    </React.Fragment>}
    key={
   key}
  >
    <Input
      type={
   !data[keyName].iconType ? /password/.test(key.toLowerCase()) ? 'password' : 'text' : 'text'}
      defaultValue={
   data[keyName][keyName2]}
      value={
   data[keyName][keyName2]}
      onChange={
   ctx.handleInputChange.bind(ctx, key2)}
    />
    {
   
      !/password/.test(key.toLowerCase()) && (
        <span className="operate-icon">
          <Icon className="plus-icon" type="plus" onClick={
   ctx.addItem.bind(ctx, key2)} />
        </span>
      )
    }
  </FormItem>
} else {
   
  if (Array.isArray(data[keyName][keyName2])) {
   
    <FormItem
      {
   ...formItemLayout}
      label={
   <React.Fragment>
        {
   /* 这里是你渲染在表单上的标签名 */}
        {
   key}
      </React.Fragment>}
      key={
   key}
    >
      {
   data[keyName].keyName2.map((item, index) => {
   
        return <FormItem key={
   index}>
          {
   data[keyName].keyName2.length > 1 ? (
            <Input
              type={
   !data[keyName].iconType ? /password/.test(key.toLowerCase()) ? 'password' : 'text' : 'text'}
              defaultValue={
   data[keyName][keyName2]}
              value=
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值