返回

Ant Design: 为 Form 的 List 赋予默认值

前端

在软件开发中,特别是前端开发中,Form是一个非常常见的组件,它允许用户输入数据,并将其发送到服务器或保存到本地。List则是一个可以动态添加和删除子组件的容器组件,在Form中使用List可以方便地实现动态表单的功能。

Ant Design的Form组件提供了强大的功能,可以轻松地创建复杂的表单。List组件也是如此,它提供了多种属性和方法来控制List的行为。但是,当您需要在Form的List中设置默认值时,可能会遇到一些挑战。

Ant Design的Form组件没有提供直接设置List默认值的方法。这可能是因为Ant Design的开发者认为,在大多数情况下,List的默认值应该由应用程序的业务逻辑来决定。但是,在某些情况下,您可能确实需要在Form的List中设置默认值。

例如,您可能有一个表单,其中包含一个List,用户可以在其中添加多个子项。每个子项都有一个名称和一个值。您希望在表单加载时,List中已经包含一些默认子项。

要实现这个需求,您可以使用Form.useForm() hook。Form.useForm() hook可以让你访问Form组件的状态和方法,包括表单的字段值。

以下是如何使用Form.useForm() hook来在Form的List中设置默认值:

import React, { useState, useEffect } from "react";
import { Form, List, Input, Button } from "antd";

const MyForm = () => {
  const [form] = Form.useForm();

  useEffect(() => {
    form.setFieldsValue({
      list: [
        { name: "Item 1", value: "Value 1" },
        { name: "Item 2", value: "Value 2" },
      ],
    });
  }, []);

  return (
    <Form form={form}>
      <List name="list">
        {(fields, { add, remove }) => {
          return (
            <>
              {fields.map((field, index) => (
                <List.Item key={field.key}>
                  <Input {...field} placeholder="Name" />
                  <Input {...field} placeholder="Value" />
                  <Button onClick={() => remove(field.name)}>删除</Button>
                </List.Item>
              ))}
              <Button onClick={() => add()}>添加</Button>
            </>
          );
        }}
      </List>
      <Button type="primary" htmlType="submit">
        提交
      </Button>
    </Form>
  );
};

export default MyForm;

在上面的代码中,我们首先使用Form.useForm() hook来获取Form组件的状态和方法。然后,我们在useEffect() hook中使用form.setFieldsValue()方法来设置List的默认值。

form.setFieldsValue()方法接收一个对象作为参数,对象中的每个键值对对应一个表单字段。在我们的例子中,我们设置了list字段的默认值,list字段是一个数组,数组中的每个元素是一个对象,对象中包含了name和value两个属性。

当表单加载时,useEffect() hook就会执行,从而设置List的默认值。现在,当用户打开表单时,List中就会包含两个默认子项。

希望本文对您有所帮助。如果您有任何问题,请随时留言。