Ant Design中自定义表单控件实现与理解

本文详细介绍了如何在AntDesign框架中创建自定义表单控件,包括使用`onchange`监听值变化并更新Form的值,以及如何封装`Input`和`Select`组件并传递状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ant Design中自定义表单控件实现与理解

在这里插入图片描述
控制Form表单项name对应字段的值的变化(onchange)和展示(value

  1. onchange()中写入你从组件中获取,传给form的值。
  2. value中是form中对应的name传给你的值。

以Ant Design中的示例为参考
其中主体代码如下:

 <Form
      name="customized_form_controls"
      layout="inline"
      onFinish={onFinish}
      initialValues={{
        price: {
          number: 0,
          currency: "rmb",
        },
      }}
    >
      <Form.Item name="price" label="Price" rules={[{ validator: checkPrice }]}>
      	//将input和下拉框封装成一个组件
        <PriceInput />
      </Form.Item>
      <Form.Item>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>

PriceInput 组件代码如下:

const PriceInput: React.FC<PriceInputProps> = ({ value = {}, onChange }) => {
  const [number, setNumber] = useState(0);
  const [currency, setCurrency] = useState<Currency>("rmb");

  const triggerChange = (changedValue: {
    number?: number;
    currency?: Currency;
  }) => {
  	//将input和select获取的值传入
    onChange?.({ number, currency, ...value, ...changedValue });
  };
  // 输入框值变化函数
  const onNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    const newNumber = parseInt(e.target.value || "0", 10);
    if (Number.isNaN(number)) {
      return;
    }
    if (!("number" in value)) {
      setNumber(newNumber);
    }
    triggerChange({ number: newNumber });
  };
  
  // 下拉框值变化函数
  const onCurrencyChange = (newCurrency: Currency) => {
    if (!("currency" in value)) {
      setCurrency(newCurrency);
    }
    triggerChange({ currency: newCurrency });
  };

  return (
    <span>
      <Input
        type="text"
        value={value.number || number}
        onChange={onNumberChange}
        style={{ width: 100 }}
      />
      <Select
        value={value.currency || currency}
        style={{ width: 80, margin: "0 8px" }}
        onChange={onCurrencyChange}
      >
        <Option value="rmb">RMB</Option>
        <Option value="dollar">Dollar</Option>
      </Select>
    </span>
  );
};

结果展示如下:
在这里插入图片描述

在Vue3中结合Ant Design Vue (ADVue) 实现表单和文件上传通常会涉及以下几个步骤: 1. 安装依赖: 首先,你需要安装`@ant-design-vue/components`库,它包含丰富的表单组件,包括`<a-form>`、`<a-input>`等。可以使用npm或yarn进行安装: ```bash npm install @ant-design-vue/components ``` 2. 引入并配置组件: 在你的Vue组件中导入需要的表单和上传组件: ```javascript import { Form, Upload } from '@ant-design-vue/components'; ``` 然后,在模板中使用它们: ```html <template> <div> <Form ref="form" :model="formData"> <!-- 表单字段 --> <Upload action="/api/upload" :multiple="true" :on-success="handleSuccess" /> <!-- 其他表单控件,如 <a-input> --> </Form> </div> </template> ``` 3. 编写数据绑定和事件处理: - `formData`: 存储表单的数据,例如 `{ fileList: [], name: '' }`。 - `handleSuccess(response, file)`: 文件上传成功后的回调,处理服务器返回的数据以及更新文件列表。 ```javascript export default { data() { return { formData: { fileList: [], }, }; }, methods: { handleSubmit(e) { this.$refs.form.validate((valid) => { if (valid) { // 提交表单数据 this.$refs.form.submit(); } }); }, handleSuccess(response, file) { // 根据response添加新的文件到fileList this.formData.fileList.push(file.response); }, }, }; ``` 4. 表单验证: ADVue提供了内置的表单验证功能,可以使用`validate`方法检查表单是否有效。例如,你可以添加`rules`属性到`<a-form>`标签内,对特定字段进行验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值