2020-08-17

Form.Item 的多级嵌套

1. 业务场景

由于本人在负责我司官网后台管理系统的时候有个需求涉及到表单的动态增删改查,所以选择了Ant Design 的Form.Item 来实现。但是大家由于我的需求是三层嵌套的即form.item 嵌套form.item 的但是官网并没有详细的使用文档。可能是本人的熟练度不够所以在使用过程中踩了不少坑。所以特意记录一下。

2. 使用

<Form form={form} name="dynamic_form_nest_item" onFinish={onFinish} autoComplete="off">
        <Form.List name="attributes">
          {(fields, { add, remove, move }) => {
            return (
              <div>
                {fields.map((field) => (
                  <div key={field.key}>
                    <div className="operation">
                      <ArrowDownOutlined
                        onClick={() => {
                          move(field.name, field.name + 1);
                        }}
                      />
                      <ArrowUpOutlined
                        onClick={() => {
                          move(field.name, field.name - 1);
                        }}
                      />
                      <MinusCircleOutlined
                        onClick={() => {
                          remove(field.name);
                        }}
                      />
                    </div>
                    <div className="from_row">
                      <Form.Item
                        {...field}
                        name={[field.name, 'title']}
                        fieldKey={[field.fieldKey, 'title']}
                        rules={[{ required: true, message: '请填写参数分类' }]}
                      >
                        <Input.TextArea className="title" placeholder="请填写参数分类" />
                      </Form.Item>
                          {/* 此处一定要注意name的写法 */}
                      <Form.List name={[field.name, 'data']}>
                        {(fieldsSecond, fieldsFunction) => {
                          return (
                            <div>
                              {fieldsSecond.map((item) => (
                                <Space key={`${field.name}${item.key}`} className="from_row">
                                  <Form.Item
                                    {...item}
                                    name={[item.name, 'name']}
                                    fieldKey={[item.fieldKey, 'name']}
                                    rules={[{ required: true, message: '请填写参数分类' }]}
                                  >
                                    <Input.TextArea
                                      className="title"
                                      placeholder="请填写参数分类"
                                    />
                                  </Form.Item>
                                  <Form.Item
                                    {...item}
                                    name={[item.name, 'value']}
                                    fieldKey={[item.fieldKey, 'value']}
                                    rules={[{ required: true, message: '请填写参数分类' }]}
                                  >
                                    <Input.TextArea
                                      className="content"
                                      placeholder="请填写参数分类"
                                    />
                                  </Form.Item>
​
                                  <div className="operation">
                                    <ArrowDownOutlined
                                      onClick={() => {
                                        fieldsFunction.move(item.name, item.name + 1);
                                      }}
                                    />
                                    <ArrowUpOutlined
                                      onClick={() => {
                                        fieldsFunction.move(item.name, item.name - 1);
                                      }}
                                    />
                                    <MinusCircleOutlined
                                      onClick={() => {
                                        fieldsFunction.remove(item.name);
                                      }}
                                    />
                                  </div>
                                </Space>
                              ))}
​
                              <Form.Item>
                                <Button
                                  type="dashed"
                                  onClick={() => {
                                    fieldsFunction.add();
                                  }}
                                  block
                                  size="large"
                                >
                                  <PlusOutlined /> 添加参数
                                </Button>
                              </Form.Item>
                            </div>
                          );
                        }}
                      </Form.List>
                    </div>
                  </div>
                ))}
​
                <Form.Item>
                  <Button
                    type="dashed"
                    onClick={() => {
                      add();
                    }}
                    block
                    size="large"
                  >
                    <PlusOutlined /> 添加参数
                  </Button>
                </Form.Item>
              </div>
            );
          }}
        </Form.List>
      </Form>

3. 效果

 

4. 注意

  • 第二级嵌套Form.Item的name的写法

  • 注意上移下移删除的参数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值