antd 封装表单

本文介绍如何利用Ant Design(antd)库封装表单组件,包括查询、弹窗和基本表单功能。首先讲解了封装过程,然后阐述如何在实际项目中应用这些组件,简化前端开发工作。

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

封装表单之后 查询、弹窗、表单都可以用

1.封装表单组件

import React, { useEffect } from 'react'
import { Button, Checkbox, Form, Input, Select } from 'antd';
export default function publicSe(props: any) {
  const {initialValues,type} = props;
  const [form] = Form.useForm();
  const { formConfig } = props
  const onFinish = (values: any) => {
    console.log('Success:', values);
  };
  const onFinishFailed = (errorInfo: any) => {
    console.log('Failed:', errorInfo);
  };
  const showDom = (item) => {
    const { type, placeholder, options, style, disabled } = item
    switch (type) {
      case 'input':
        return <Input placeholder
### 使用 Ant Design Vue 表单结合 Vue Hooks 封装 Ant Design Vue 是基于 Ant Design 的一套企业级 UI 组件库,而 Vue Hooks 则是一种通过组合函数来管理逻辑的方式。为了将两者结合起来并进行封装,可以按照以下方式实现。 #### 1. 创建自定义 Hook 函数 Vue 中虽然不像 React 那样有官方的 Hook API,但我们可以通过组合式 API 来模拟类似的模式。以下是创建一个用于表单验证和提交的自定义 Hook 示例: ```javascript // useForm.js import { ref, reactive } from 'vue'; export default function useForm(initialValues, validateFields) { const formData = reactive({ ...initialValues }); const resetFields = () => { Object.keys(initialValues).forEach(key => { formData[key] = initialValues[key]; }); }; const submitForm = async () => { try { await validateFields(formData); console.log('Form submitted:', formData); return true; } catch (error) { console.error('Validation failed', error); return false; } }; return { formData, resetFields, submitForm }; } ``` 此 `useForm` 自定义 Hook 接收初始值对象以及校验方法作为参数,并返回当前表单数据、重置字段的方法和提交表单的方法[^4]。 --- #### 2. 结合 Ant Design Vue 表单组件使用 下面是一个完整的示例,展示如何在组件中使用该 Hook 并与 Ant Design Vue 的 `<a-form>` 和 `<a-input>` 等组件集成: ```vue <template> <a-form :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"> <a-form-item label="用户名"> <a-input v-model:value="formData.username" /> </a-form-item> <a-form-item label="密码"> <a-input-password v-model:value="formData.password" /> </a-form-item> <a-form-item :wrapper-col="{ offset: 8, span: 16 }"> <a-button type="primary" @click="submitForm">提交</a-button> <a-button style="margin-left: 10px;" @click="resetFields">重置</a-button> </a-form-item> </a-form> </template> <script> import useForm from './useForm'; import { message } from 'ant-design-vue'; export default { setup() { const validateFields = (data) => { if (!data.username || !data.password) { throw new Error('请输入所有必填项'); } if (data.password.length < 6) { throw new Error('密码长度至少为6位'); } return Promise.resolve(); }; const { formData, resetFields, submitForm } = useForm( { username: '', password: '' }, validateFields ); const handleSubmit = async () => { const success = await submitForm(); if (success) { message.success('表单提交成功!'); } }; return { formData, resetFields, submitForm: handleSubmit }; } }; </script> ``` 在此示例中,我们利用了 `v-model` 双向绑定机制让输入框与 `formData` 同步更新。当点击按钮时调用对应的钩子功能完成操作[^5]。 --- #### 3. 扩展功能 如果希望进一步增强灵活性,还可以考虑支持动态添加/删除字段的功能或者引入第三方库(如 Yup 或 Ajv)来进行更复杂的校验规则配置。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值