使用 antd 响应动态表单输入

React dynamic Form inputs using antd

提问人:program_bumble_bee 提问时间:10/18/2023 更新时间:10/19/2023 访问量:29

问:

我正在尝试根据NextJs中的请求创建动态表单字段。到目前为止,基本代码如下所示:

return (
    <>
      <Row
        style={{
          justifyContent: "space-between",
        }}
      >
        <Col span={20}>
          <Form
            onFinish={onFinish}
            onFinishFailed={onFinishFailed}
            autoComplete="off"
          >
            <Form.Item
              label="Title"
              name="title"
              rules={[
                {
                  required: true,
                  message: "Title is required",
                },
              ]}
            >
              <Input placeholder="Enter a title for the article" />
            </Form.Item>

            <Form.Item
              label="Sub-Title"
              name="subTitle"
              rules={[
                {
                  required: true,
                  message: "Sub Title is required",
                },
              ]}
            >
              <Input placeholder="Enter a sub-title for the article " />
            </Form.Item>

            <Form.Item
              label="Content"
              name="content1"
              rules={[
                {
                  required: true,
                },
              ]}
            >
              <TextArea rows={10} placeholder="Add Article Paragraph" />
            </Form.Item>

            <Form.Item wrapperCol={{ offset: 8, span: 16 }}>
              <input type="file" name="file" multiple onChange={uploadImages} />
            </Form.Item>

            <Form.Item wrapperCol={{ offset: 8, span: 16 }}>
              <Button type="primary" htmlType="submit">
                Submit
              </Button>
            </Form.Item>
          </Form>
        </Col>
      </Row>
    </>
  );

enter image description here

我正在使用 AntD 进行 UI 设计。我需要扩展此功能的是单击“添加更多内容”按钮,它应该添加更多多行输入框,其名称(或 id)应变为 content2、content 等,以便单篇文章 JSON 对象的最终结构应如下所示:

{
    title: '',
    subTitle: '',
    content: [
      'content1': 'content one data',
      'content2': 'content two data'
    ]
}

我知道我可以使用 React 的 useState() 钩子并在其中定义表单字段的对象,并在每次单击按钮时推送一个新对象,但这种模式对我来说似乎不太有效,因为我正在尝试利用 Antd 库本身。 如果有任何线索提供更好的解决方案,将不胜感激。

表单 下一个 .js 嵌套 ANTD

评论

0赞 Muhammad Nouman Rafique 10/18/2023
对于“content”,您可以使用 Form.List 和 Form.List provide 方法在列表中添加更多元素。您可以按照此示例进行操作add
0赞 program_bumble_bee 10/19/2023
好吧,我尝试了这个示例,但是官方 ANTD 文档中提供的示例没有打开默认字段。它仅在单击按钮时创建表单的第一个输入字段。我需要提供第一个打开/存在的输入字段,然后如果用户单击按钮,则附加新字段(类似的字段)。
0赞 Muhammad Nouman Rafique 10/19/2023
将组件与 API 连接,然后在从 api 获取值后设置默认值。<Formform

答:

0赞 J.chen 10/19/2023 #1

您可以按列表进行渲染,例如:<Form.Item>

const FormConfig = [
  {
    label: "Title",
    name: "Title",
    ...
  },
  {
    label: "Content",
    name: "Content",
    components: [
      <TextArea rows={10} placeholder="Add Article Paragraph" />
    ]
  }
]

每次单击该按钮时,只需将新的组件列表推送到即可。<TextArea>

评论

0赞 program_bumble_bee 10/19/2023
嗨 @J.chen 您能否帮助详细说明代码示例,以及您建议如何使用 FormConfig?谢谢