reactjs 是否可以通过点击react中的某个按钮来分别获取某些表单字段的数据?

qyuhtwio  于 2023-01-12  发布在  React
关注(0)|答案(1)|浏览(166)

我有一个有几个字段的表单,我需要获取一些字段的值,并通过单击按钮将它们保存在一个状态中,然后通过单击提交按钮将所有表单字段数据发送到服务器。有没有任何方法可以在react中完成?
下面是一个示例代码:
在此示例中,用户可以通过单击“Add account info”按钮来添加多个帐户信息。我需要收集表单中“Account Information”部分的值,并将其放入如下数组中:

"accountInfo": [
    {
      "email": "",
      "securityQuestion": ,
      "securityAnswer": ""
    }
  ]

最后通过点击提交按钮,所有表单值(包括几个帐户信息)应发送到服务器。

import React, { useCallback } from 'react'
import { Form, Button } from 'antd'
import FormBuilder from 'antd-form-builder'

export default () => {
  const [form] = Form.useForm()
  const handleFinish = useCallback(values => {
    console.log('Submit: ', values)
  })
  const meta1 = [
    { key: 'name.first', label: 'First Name', required: true },
    { key: 'name.last', label: 'Last Name', required: true },
    { key: 'dob', label: 'Date of Birth', widget: 'date-picker' },
  ]
  const meta2 = [
    {
      key: 'email',
      label: 'Email',
      rules: [{ type: 'email', message: 'Invalid email' }],
    },
    {
      key: 'security',
      label: 'Security Question',
      widget: 'select',
      placeholder: 'Select a question...',
      options: [{label: "What's your pet's name?", value: 1 }, {label: 'Your nick name?', value:2}],
    },
    { key: 'answer', label: 'Security Answer' },
  ]
  const meta3 = {
    fields: [
      { key: 'address', label: 'Address' },
      { key: 'city', label: 'City' },
      { key: 'phone', label: 'phone' },
    ],
  }

  return (
    <Form layout="horizontal" form={form} onFinish={handleFinish} style={{ width: '500px' }}>
      <fieldset>
        <legend>Personal Information</legend>
        <FormBuilder form={form} meta={meta1} />
      </fieldset>
      <fieldset>
        <legend>Account Information</legend>
        <FormBuilder form={form} meta={meta2} />
        <Form.Item wrapperCol={{ span: 16, offset: 8 }}>
        <Button type="primary">
          Add account info
        </Button>
      </Form.Item>
      </fieldset>
      <fieldset>
        <legend>Contact Infomation</legend>
        <FormBuilder form={form} meta={meta3} />
      </fieldset>
      <Form.Item className="form-footer" wrapperCol={{ span: 16, offset: 8 }}>
        <Button htmlType="submit" type="primary">
          Submit
        </Button>
      </Form.Item>
    </Form>
  )
}
db2dz4w8

db2dz4w81#

antd FormInstance接口中有两个键您可能会感兴趣。

  1. getFieldsValue通过一组字段名获取表单的完整值。
  2. getFieldValue,按字段名获取值。
    但是,您可以通过使用 htmlType=“submit” 按钮获取这些值并对其执行任何操作:
<Button form="myForm" htmlType="submit"> my btn </Button>

要使此按钮工作,请不要忘记为表单的键 onFinish 分配一些功能:

<Form
   onFinish={(formData) => console.log(formData)}
   id="myForm"
   // ... your other properties
>
   ...
</Form>

相关问题