如何拿到Pro组件中ProFormItem用户操作后的value

1,255 阅读3分钟

ProForm 中,可以通过 onFinish 方法来获取表单提交的数据。而在 ProForm.Item 中,可以使用 name 属性来指定该表单项的字段名称,并通过 initialValues 属性来初始化表单值。

当表单项的值发生变化时,可以通过 Form.Item 组件的 onValuesChange 属性来获取表单项的变化,并将值存储在组件的 stateprops 中。这样,当用户提交表单时,就可以从 stateprops 中获取表单项的值,进行相应的操作。

以下是一个示例代码,用于演示如何在 ProForm 中获取表单提交的数据:

import React, { useState } from 'react';
import { ProForm, ProFormText, ProFormSelect, ProFormDatePicker, ProFormDateTimePicker, ProFormTextArea } from '@ant-design/pro-form';

const MyForm = () => {
  const [formValues, setFormValues] = useState({});

  const onFinish = (values) => {
    console.log('form values:', values);
  };

  const handleValuesChange = (changedValues, allValues) => {
    console.log('changed values:', changedValues);
    console.log('all values:', allValues);
    setFormValues(allValues);
  };

  return (
    <ProForm onFinish={onFinish} onValuesChange={handleValuesChange}>
      <ProFormText name="username" label="用户名" />
      <ProFormSelect name="gender" label="性别" options={[{ value: 'male', label: '' }, { value: 'female', label: '' }]} />
      <ProFormDatePicker name="birthday" label="出生日期" />
      <ProFormDateTimePicker name="createdAt" label="创建时间" />
      <ProFormTextArea name="description" label="描述" />
    </ProForm>
  );
};

在这个示例中,ProForm 组件的 onFinish 方法被定义为 onFinish={onFinish},并在表单提交时被调用。同时,ProForm 组件的 onValuesChange 方法被定义为 onValuesChange={handleValuesChange},并在表单项值发生变化时被调用。

handleValuesChange 方法中,changedValuesallValues 分别代表了发生变化的表单项和所有表单项的值。这些值可以通过 setFormValues 方法存储在组件的 state 中。

onFinish 方法中,可以通过 values 参数获取表单提交的数据,从而进行相应的操作。

最后,我这里再总结一下之前写业务时ProForm的一些心得和注意事项,供大家了解:

  1. 表单布局:ProForm 组件提供了多种表单布局,例如水平布局、垂直布局和内联布局。根据需求选择合适的布局样式,可以通过 layout 属性进行设置。
  2. 表单验证:ProForm 内部集成了强大的表单验证功能,可以通过 rules 属性来设置字段的验证规则。可以使用预定义的验证规则(如 requiredemailurl 等),也可以自定义验证函数。
  3. 自定义组件:除了内置的表单组件(如 ProFormTextProFormSelect 等),ProForm 还支持自定义组件。可以通过 render 属性来渲染自定义的表单控件,这样可以满足更灵活的需求。
  4. 表单联动:在一些场景下,表单项之间可能存在联动关系,一个字段的值的变化会影响其他字段的显示或可用性。ProForm 提供了 dependencies 属性来实现表单联动效果。可以根据字段的值来动态改变其他字段的配置。
  5. 表单重置:ProForm 内置了重置表单的功能,可以通过 resetFields 方法来重置表单字段的值。可以将 form 实例传递给组件,然后在需要的时候调用 form.resetFields() 方法来实现表单重置。
  6. 表单提交:ProForm 提供了多种提交表单的方式,可以通过 onFinishonFinishFailed 等属性来处理表单提交的逻辑。可以在 onFinish 回调函数中进行表单数据的处理或发送网络请求。
  7. 国际化支持:ProForm 支持国际化,在使用 ProForm 组件时可以通过 locale 属性来设置组件的语言。可以根据实际需要配置不同的语言包。